Pagini recente » Cod sursa (job #2827114) | Cod sursa (job #914495) | Cod sursa (job #2391285) | Cod sursa (job #2674562) | Cod sursa (job #1470501)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_N 100000
#define MAX(A, B) ((A) > (B) ? (A) : (B))
#pragma warning(disable : 4996)
int v[MAX_N + 1];
int best[MAX_N + 1];
void updateSolution(int lo, int hi, int *solution) {
memset(best, 0, sizeof(best));
best[lo + 1] = v[lo] + v[lo + 1];
for (int i = lo + 2; i <= hi; i++) {
best[i] = MAX(best[i - 1], best[i - 3] + v[i] + v[i - 1]);
}
*solution = MAX(*solution, best[hi]);
}
inline int readInt(FILE *f) {
char c;
int q = 0;
do {
c = fgetc(f);
} while (!isdigit(c));
do {
q = (10 * q) + (c - '0');
c = fgetc(f);
} while (isdigit(c));
return q;
}
int main(void) {
int n;
int ans;
FILE *f = fopen("oo.in", "r");
fscanf(f, "%d", &n);
for (int i = 0; i < n; i++) {
v[i] = readInt(f);
}
fclose(f);
v[n] = v[0];
ans = 0;
updateSolution(0, n - 2, &ans);
updateSolution(1, n - 1, &ans);
updateSolution(2, n, &ans);
f = fopen("oo.out", "w");
fprintf(f, "%d\n", ans);
fclose(f);
return 0;
}