Pagini recente » Cod sursa (job #2970445) | Cod sursa (job #2015741) | Cod sursa (job #1783963) | Cod sursa (job #1682791) | Cod sursa (job #2069743)
#include <fstream>
using namespace std;
FILE *f, *g;
int n, x, a[3][4], v[100001];
int main()
{
f = freopen("oo.in", "r", stdin);
g = freopen("oo.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &v[i]);
if (n < 6)
{
int mx = -1;
for (int i = 1; i <= n; i++)
mx = max(mx, v[i] + v[i % n + 1]);
printf("%d", mx);
return 0;
}
a[0][0] = a[0][1] = v[n] + v[n - 1]; a[0][2] = v[2] + v[3] + a[0][0];
a[1][0] = a[1][1] = a[1][2] = v[n] + v[1];
a[2][0] = 0; a[2][1] = a[2][2] = v[1] + v[2];
for (int i = 4; i < n - 2; i++)
{
for (int j = 0; j < 3; j++)
a[j][3] = max(a[j][2], v[i] + v[i - 1] + a[j][0]);
for (int j = 0; j < 3; j++)
for (int k = 0; k < 3; k++)
a[j][k] = a[j][k + 1];
}
a[1][3] = max(a[1][2], v[n - 2] + v[n - 3] + a[1][0]);
a[2][3] = max(a[2][2], v[n - 2] + v[n - 3] + a[2][0]);
for (int k = 0; k < 3; k++)
a[2][k] = a[2][k + 1];
a[2][3] = max(a[2][2], v[n - 1] + v[n - 2] + a[2][0]);
int mx = -1;
for (int j = 0; j < 3; j++)
for (int k = 0; k < 4; k++)
mx = max(mx, a[j][k]);
printf("%d", mx);//max(max(a[0][3], a[1][3]), a[2][3]));
}