Pagini recente » Cod sursa (job #1355662) | Cod sursa (job #3339179) | Cod sursa (job #327413) | Cod sursa (job #2026929) | Cod sursa (job #3341520)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("oo.in");
ofstream fout("oo.out");
#define nmax 100005
int n, v[nmax], p[nmax], dp[nmax];
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
fin >> v[i];
for (int i = 1; i <= n; i++)
p[i] = v[i] + v[i % n + 1];
// Case 1: p[1..n-1]
dp[0] = 0;
dp[1] = max(0, p[1]);
dp[2] = max(dp[1], p[2]); // special: can't go back 3
for (int i = 3; i <= n - 1; i++)
dp[i] = max(dp[i - 1], dp[i - 3] + p[i]);
int ans = dp[n - 1];
// Case 2: p[2..n]
dp[1] = 0;
dp[2] = max(0, p[2]);
dp[3] = max(dp[2], p[3]); // special: can't go back 3 from index 3 (would be index 0 which is fine actually)
for (int i = 3; i <= n; i++)
dp[i] = max(dp[i - 1], dp[i - 3] + p[i]);
ans = max(ans, dp[n]);
fout << ans;
return 0;
}