Cod sursa(job #132197)

Utilizator alexeiIacob Radu alexei Data 5 februarie 2008 12:46:01
Problema Oo Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<stdio.h>
#define nmax 100002
#define max(a,b) ((a)>(b)?(a):(b))
long d1[nmax],d2[nmax];

int main()
{
 freopen("oo.in","r",stdin);
 freopen("oo.out","w",stdout);
 
 int n;
 scanf("%d",&n);
    
int aux1,aux2=0;
long solfin;
int i;
 
    for(i=1; i<=n; ++i){
     scanf("%d",&aux1);
     d1[i]=aux1+aux2;
     aux2=aux1;
     }   
     d1[1]+=aux1;
  
  d2[1]=d1[1]; 
 
  for(i=4; i<n; ++i)
{  
  if( d2[i-2]+d1[i] > d2[i-1])
  d2[i]=d2[i-2]+d1[i];
  else
  d2[i]=d2[i-1];
  
}
 solfin=d2[n-1];
 /*
 for(i=1; i<=n; ++i)
 printf("%d ",d2[i]);*/
 d2[1]=0;
 d2[2]=d2[3]=d2[4]=d1[2];
 
 for(i=5; i<n; ++i)
{
  if( d2[i-3]+d1[i] > d2[i-2])
  d2[i]=d2[i-3]+d1[i];
  else
  d2[i]=d2[i-2];
}
 solfin=max(solfin,d2[n-1]);
 
 d2[1]=0;
 d2[2]=0;
 d2[3]=d1[3];
 n-=2;
 
for(i=4; i<=n; ++i)
{
  if( d2[i-2]+d1[i] > d2[i-1])
  d2[i]=d2[i-2]+d1[i];
  else
  d2[i]=d2[i-1];
}
 solfin=max(solfin,d2[n-1]);
 
 printf("%d",solfin);
 
    return 0;
}