Pagini recente » Cod sursa (job #2965755) | Cod sursa (job #1321010) | Cod sursa (job #839013) | Cod sursa (job #2699515) | Cod sursa (job #2421906)
#include <cstdio>
#define MAXN 100000
FILE *fin = fopen("oo.in", "r");
FILE *fout = fopen("oo.out", "w");
inline int maxx(int a, int b, int c) {
int rez = a;
if (b > rez)
rez = b;
if (c > rez)
rez = c;
return rez;
}
int d1[MAXN + 1][3];
int d2[MAXN + 1][3];
int d3[MAXN + 1][3];
int a[MAXN + 1];
int main()
{
int n;
fscanf(fin, "%d", &n);
for (int i = 1; i <= n; i++)
fscanf(fin, "%d", &a[i]);
d1[1][0] = 0;
d1[1][1] = a[1];
d1[1][2] = 0;
for (int i = 2; i <= n - 1; i++) {
d1[i][0] = maxx(d1[i - 1][2], d1[i - 1][0], 0);
d1[i][1] = d1[i - 1][0] + a[i];
d1[i][2] = d1[i - 1][1] + a[i];
}
d2[2][0] = 0;
d2[2][1] = a[2];
d2[2][2] = 0;
for (int i = 3; i <= n; i++) {
d2[i][0] = maxx(d2[i - 1][2], d2[i - 1][0], 0);
d2[i][1] = d2[i - 1][0] + a[i];
d2[i][2] = d2[i - 1][1] + a[i];
}
d3[3][0] = 0;
d3[3][1] = a[3];
d3[3][2] = 0;
for (int i = 4; i <= n; i++) {
d3[i][0] = maxx(d3[i - 1][2], d3[i - 1][0], 0);
d3[i][1] = d3[i - 1][0] + a[i];
d3[i][2] = d3[i - 1][1] + a[i];
}
int rez3 = d3[n][1] + a[1];
int rez1 = maxx(d1[n - 1][0], d1[n - 1][2], 0);
int rez2 = maxx(d2[n][0], d2[n][2], 0);
if (rez2 > rez1)
rez1 = rez2;
if (rez3 > rez1)
rez1 = rez3;
fprintf(fout, "%d", rez1);
return 0;
}