Cod sursa(job #40544)

Utilizator unholyfrozenCostea Andrei unholyfrozen Data 27 martie 2007 14:55:02
Problema Oo Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<stdio.h>

#define NMAX 100010

void read(void);
void solve(void);

int A[NMAX], N, V[NMAX];

int main(void)
{
	freopen("oo.in", "r", stdin);
     freopen("oo.out", "w", stdout);

     read();
     solve();
	return 0;
}

void read(void)
{
	int i;
     
	scanf("%d ", &N);

     for(i = 0; i < N; i++)
     scanf("%d ", A + i);

}

void solve(void)
{
	int i, ok, max = 0;

     if(N == 2)
     {
     printf("%d\n", A[0] + A[1]);
     return;
     }
     
     V[0] = 0;
     for(i = 3; i <= N; i++)
     {
     	V[i] = V[i - 1];
          ok = V[i - 3];
          if(V[i] < ok + A[i - 1] + A[i - 2])
          	V[i] = ok + A[i - 1] + A[i - 2];
     }
     if(V[N] > max) max = V[N];
     
     V[0] = 0;
     for(i = 2; i < N; i++)
     {
     	V[i] = V[i - 1];
          if(i == 2) ok = 0;
          	else ok = V[i - 3];
               
          if(V[i] < ok + A[i - 1] + A[i - 2])
          	V[i] = ok + A[i - 1] + A[i - 2];
     }

     if(V[N - 1] > max) max = V[N - 1];
     
     V[1] = A[0] + A[N - 1];
     for(i = 4; i < N - 1; i++)
     {
     	V[i] = V[i - 1];
          ok = V[i - 3];
          if(V[i] < ok + A[i - 1] + A[i - 2])
          	V[i] = ok + A[i - 1] + A[i - 2];
     }
     if(V[N - 2] > max) max = V[N - 2];

     printf("%d\n", max);
}