Cod sursa(job #32778)

Utilizator pocaituDavid si Goliat pocaitu Data 18 martie 2007 14:23:40
Problema Oo Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
#include<fstream.h>
#define nmax 100002
long v[nmax],n;
inline long max(long a, long b) {return a>b?a:b;}
void citire(); void afisare(long);long rezolva();

int main()
{citire();
 afisare(rezolva());


 return 0;
 }
void citire()
{long i;
 freopen("oo.in","r",stdin);
 scanf("%ld",&n);
 for(i=1;i<=n;i++)
  scanf("%ld",&v[i]);
 }
void afisare(long sol)
{freopen("oo.out","w",stdout);
 printf("%ld",sol);
 fclose(stdout);
 }
long rezolva()
{long j,solutie,sol[nmax];
 memset(sol,0,sizeof(sol));
 //initializare();
 for(j=2;j<n;j++)
   if(j==2)
	 sol[j]=v[1]+v[2];
   else
	 sol[j]=max(max(sol[j-1],sol[j-2]),sol[j-3]+v[j]+v[j-1]);
 solutie=sol[n-1];
 memset(sol,0,sizeof(sol));
 sol[1]=sol[2]=sol[3]=v[1]+v[n];


 for(j=4;j<n-1;j++)
	sol[j]=max(max(sol[j-1],sol[j-2]),sol[j-3]+v[j]+v[j-1]);
 solutie=max(solutie,sol[n-2]);




 memset(sol,0,sizeof(sol));
 for(j=3;j<=n;j++)
   sol[j]=max(max(sol[j-1],sol[j-2]),sol[j-3]+v[j]+v[j-1]);
 return max(solutie,sol[n]);

 }