Cod sursa(job #2421906)

Utilizator StefanManolacheManolache Stefan StefanManolache Data 16 mai 2019 17:19:24
Problema Oo Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#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;
}