Pagini recente » Cod sursa (job #795085) | Cod sursa (job #319689) | Cod sursa (job #2762768) | Cod sursa (job #2299763) | Cod sursa (job #2490870)
#include <bits/stdc++.h>
using namespace std;
ifstream f("oo.in");
ofstream g("oo.out");
const int NMAX = 1e5 + 10;
int N, A[NMAX];
int dp[NMAX], ans;
static inline void Read ()
{
f.tie(NULL);
f >> N;
for(int i = 1; i <= N; ++i)
f >> A[i];
return;
}
static inline void Solve1 ()
{
dp[1] = A[1] + A[2];
dp[2] = A[2] + A[3];
for(int i = 3; i < N; ++i)
dp[i] = max(dp[i - 3] + A[i] + A[i + 1], dp[i - 1]);
ans = dp[N - 1];
return;
}
static inline void Solve2 ()
{
memset(dp, 0, sizeof(dp));
dp[1] = A[N] + A[1];
dp[2] = A[1] + A[2];
for(int i = 3; i < N; ++i)
if(i != (N - 1))
dp[i] = max(dp[i - 3] + A[i] + A[i + 1], dp[i - 1]);
else dp[i] = dp[i - 1];
ans = max(ans, dp[N - 1]);
return;
}
int main()
{
Read();
Solve1();
Solve2();
g << ans << '\n';
return 0;
}