Pagini recente » Cod sursa (job #2411485) | Cod sursa (job #2173109) | Cod sursa (job #2998486) | Cod sursa (job #761860) | Cod sursa (job #3276125)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("suma2.in");
ofstream fout("suma2.out");
int n;
long long x, y; // vor tine minte suma maxima calculata
// x reprezinta suma maxima in care ultimul element este inclus (valoarea cand se adauga un element)
// y reprezinta suma maxima in care ultimul element NU este inclus (valoarea cand ssare un element)
int main()
{
fin >> n;
for(int i = 1; i <= n; i++) { // parcurg toate elementele sirului
long long val;
fin >> val;
// verific daca indexul i este par sau impar, pentru a alterna in doua cazuri:
// 1. daca i este par (adica elementul curent nu este alaturat celui precedent in solutia optima)
// astfel x = max(y, max(x + val, val)) se obtine din: actualizeaza suma maxima x cand includem
// sau nu un element curent val;
// x + val: adaugam elementul curent la suma anterioara care a inclus ultimul element
// se compara cu y in care am sarit un element
// 2. daca i este impar (adica elementul curent poate fi inclus doar daca sarim peste elementele anterioare)
// y = max(x, max(y + val, val)); se actualizeaza suma maxima in y in care nu includem
// elementul curent, ci doar valorile anterioare cu un salt
if (i % 2 == 0)
x = max(y, max(x + val, val));
else
y = max(x, max(y + val, val));
}
fout << max(x, y);
return 0;
}