Pagini recente » Cod sursa (job #1076108) | Cod sursa (job #2937714) | Cod sursa (job #3334120) | Cod sursa (job #3350497) | Cod sursa (job #3348106)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("oo.in");
ofstream fout("oo.out");
#define NMAX 100000
int v[NMAX + 2];
int dp[NMAX + 1];
int maxim[NMAX + 1];
void reset_maxim(int N){
for (int i = 1; i <= N; i++){
maxim[i] = 0;
}
}
int main()
{
int N;
fin >> N;
for (int i = 1; i <= N; i++){
fin >> v[i];
}
v[N + 1] = v[1];
int rez = 0;
for (int i = 1; i <= N - 2; i++){
if (i <= 2){
dp[i] = v[i] + v[i + 1];
maxim[i] = max(maxim[i - 1], dp[i]);
rez = max(rez, dp[i]);
continue;
}
dp[i] = v[i] + v[i + 1] + maxim[i - 3];
maxim[i] = max(maxim[i - 1], dp[i]);
rez = max(rez, dp[i]);
}
reset_maxim(N);
for (int i = 2; i <= N - 1; i++){
if (i <= 3){
dp[i] = v[i] + v[i + 1];
maxim[i] = max(maxim[i - 1], dp[i]);
rez = max(rez, dp[i]);
continue;
}
dp[i] = v[i] + v[i + 1] + maxim[i - 3];
maxim[i] = max(maxim[i - 1], dp[i]);
rez = max(rez, dp[i]);
}
reset_maxim(N);
for (int i = 3; i <= N; i++){
if (i <= 4){
dp[i] = v[i] + v[i + 1];
maxim[i] = max(maxim[i - 1], dp[i]);
rez = max(rez, dp[i]);
continue;
}
dp[i] = v[i] + v[i + 1] + maxim[i - 3];
maxim[i] = max(maxim[i - 1], dp[i]);
rez = max(rez, dp[i]);
}
fout << rez;
return 0;
}