Pentru a nu intra în faliment, noua conducere a fabricii OLDTRICK a derulat un plan de restructurate în n etape. În fiecare etapă, fabrica a împrumutat de la bancă o sumă ai. La terminarea celor n etape, fabrica a început să restituie împrumuturile astfel: primul împrumut a fost restituit, apoi conducerea fabricii a constatat că nu-și poate achita toate datoriile și a hotărât să restituie doar sume care nu au fost împrumutate în etape succesive. Să se determine care este suma totală maximă pe care o poate restitui fabrica.
Cerința
Cunoscând n – numărul de etape, ai – suma împrumutată în etapa i (1 ≤ i ≤ n), să se determine care este suma totală maximă pe care o poate restitui fabrica, știind că primul împrumut este întotdeauna achitat.
Date de intrare
Fișierul de intrare datorii.in conține pe prima linie n numărul de etape iar pe următoarea linie n valori naturale nenule a1, a2, …, an reprezentând sumele împrumutate în fiecare etapă.
Date de ieșire
Fișierul de ieșire datorii.out va conține pe prima linie un număr reprezentând suma totală maximă pe care o poate restitui fabrica.
Restricții și precizări
1 ≤ n ≤ 10001 ≤ ai≤ 10000
Exemplul 1:
datorii.in
6 1 3 6 2 4 3
datorii.out
11
Exemplul 2:
datorii.in
4 2 1 4 100
datorii.out
102
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema datorii:
#include <bits/stdc++.h>
using namespace std;
int a[10005], dp[10005], n;
/// dp[i] = suma maxima obtinuta din a[1..i]
int main()
{
int i;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
fin >> n;
for (i = 1; i <= n; i++)
fin >> a[i];
dp[2] = dp[1] = a[1];
///dp[2] = max(a[1], a[2]);
for (i = 3; i <= n; i++)
dp[i] = max(dp[i - 1], dp[i - 2] + a[i]);
fout << dp[n] << "\n";
fin.close();
fout.close();
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa
.
Rezolvarea problemei #2704 datorii
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2704 datorii de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!