Pagini recente » Monitorul de evaluare | Cod sursa (job #942743) | Diferente pentru utilizator/anna_bozianu intre reviziile 15 si 5 | Diferente pentru monthly-2014/runda-4/solutii intre reviziile 13 si 10 | Cod sursa (job #3232134)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("oo.in");
ofstream g("oo.out");
const int NMAX = 100000 + 1;
int n, i, v[NMAX], dp[NMAX];
void clear()
{
for (int i = 1; i <= n + 1; ++i)
dp[i] = 0;
}
int main()
{
f >> n;
for (i = 1; i <= n; ++i)
f >> v[i];
f.close();
/// ultimul cu primul
dp[2] = v[n] + v[1];
for (i = 3; i <= n - 1; ++i)
dp[i] = max(dp[i-1], dp[i-3] + v[i-2] + v[i-1]);
int v1 = dp[n-1];
clear();
/// primul cu al doilea
dp[3] = v[1] + v[2];
for (i = 3; i <= n; ++i)
dp[i] = max(dp[i-1], dp[i-3] + v[i-2] + v[i-1]);
int v2 = dp[n];
clear();
/// al doilea cu al treilea
dp[4] = v[2] + v[3];
for (i = 4; i <= n + 1; ++i)
dp[i] = max(dp[i-1], dp[i-3] + v[i-2] + v[i-1]);
int v3 = dp[n+1];
clear();
g << max(v1, max(v2, v3));
g.close();
return 0;
}