Cod sursa(job #33440)

Utilizator dominoMircea Pasoi domino Data 19 martie 2007 13:28:29
Problema Oo Scor 70
Compilator c Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>

int N, A[10000], Bst[10000], Res;

int solve(int l, int r)
{
    int i;

    for (i = l; i <= r; i++)
    {
        Bst[i] = Bst[i - 1];
        if (Bst[i] < Bst[(i + N - 3) % N] + A[i - 1] + A[i])
           Bst[i] = Bst[(i + N - 3) % N] + A[i - 1] + A[i];
    }
    return l <= r ? Bst[r] : 0;
}

int main(void)
{
    FILE *f;
    int i, t;

    f = fopen("oo.in", "r");
    fscanf(f, "%d", &N);
    for (i = 0; i < N; i++)
        fscanf(f, "%d", A + i);
    fclose(f);

    Res = Bst[1] = Bst[2] = A[0] + A[1];
    Res = Res < (t = solve(3, N - 2)) ? t : Res;
    Bst[N - 1] = 0, Bst[0] = Bst[1] = A[0] + A[N - 1];
    Res = Res < (t = solve(2, N - 3)) ? t : Res;
    Bst[N - 2] = 0, Bst[N - 1] = Bst[0] = A[N - 1] + A[N - 2];
    Res = Res < (t = solve(1, N - 4)) ? t : Res;

    f = fopen("oo.out", "w");
    fprintf(f, "%d\n", Res);
    fclose(f);
    
    return 0;
}