Cod sursa(job #130207)

Utilizator floringh06Florin Ghesu floringh06 Data 31 ianuarie 2008 16:58:11
Problema Oo Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <cstdio>
#include <cstring>

using namespace std;

#define FIN "oo.in"
#define FOUT "oo.out"
#define MAX_N 100005

int A[MAX_N];
int B[MAX_N];

int N, T, i;
int BEST;

    void solve ()
    {
         A[3] = B[2] + B[3];
         for (i = 4; i <= N; ++i)
         {
             A[i] = B[i] + B[i - 1] + A[i - 3];
             if (A[i - 1] > A[i]) 
                     A[i] = A[i - 1];
         }
         
         BEST = A[N];
         A[2] = B[1] + B[2];
         if (A[2] > BEST) BEST = A[2];
         A[3] = B[2] + B[3];
         if (A[3] > BEST) BEST = A[3];
         for (i = 4; i < N; ++i)
         {
             A[i] = B[i] + B[i - 1] + A[i - 3];
             if (A[i - 1] > A[i]) 
                     A[i] = A[i - 1];
         }
         
         if (A[N - 1] > BEST) BEST = A[N - 1];
         A[1] = B[1] + B[N];
         A[2] = A[1];
         if (A[1] > BEST) BEST = A[1];
         for (i = 3; i < N - 1; ++i)
         {
             A[i] = B[i] + B[i - 1] + A[i - 3];
             if (A[i - 1] > A[i])
                     A[i] = A[i - 1];
         }
         
         if (A[N - 2] > BEST) BEST = A[N - 2];
         
         printf ("%d\n", BEST);
    } 

    int main ()
    {
        freopen (FIN, "r", stdin);
        freopen (FOUT, "w", stdout);
        
        scanf ("%d", &N);
        for (i = 1; i <= N; ++i)
            scanf ("%d", B + i);
        
        solve ();
        
        return 0;
    }