Pagini recente » Cod sursa (job #150616) | Cod sursa (job #45185) | Cod sursa (job #880538) | Cod sursa (job #1220925) | Cod sursa (job #2490874)
#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 () /// 1 + 2:
{
dp[1] = A[1] + A[2];
dp[2] = dp[1];
for(int i = 3; i < N - 1; ++i)
dp[i] = max(dp[i - 3] + A[i] + A[i + 1], dp[i - 1]);
ans = dp[N - 2];
return;
}
static inline void Solve2 () /// 1 + N:
{
memset(dp, 0, sizeof(dp));
dp[1] = A[N] + A[1];
dp[2] = dp[1];
for(int i = 3; i < N - 1; ++i)
dp[i] = max(dp[i - 3] + A[i] + A[i + 1], dp[i - 1]);
ans = max(ans, dp[N - 2]);
return;
}
static inline void Solve3 () /// 2 + 3:
{
memset(dp, 0, sizeof(dp));
dp[1] = 0;
dp[2] = A[2] + A[3];
dp[3] = dp[2];
for(int i = 4; i < N; ++i)
dp[i] = max(dp[i - 3] + A[i] + A[i + 1], dp[i - 1]);
ans = max(ans, dp[N - 1]);
return;
}
int main()
{
Read();
Solve1();
Solve2();
Solve3();
g << ans << '\n';
return 0;
}