Cod sursa(job #121652)
#include<cstdio>
#define INF "oo.in"
#define OUF "oo.out"
#define NMAX 100004
using namespace std;
int v[NMAX],a[NMAX],best[NMAX];
void print(int n)
{
for(int i=1;i<n;++i) printf("%d ",a[i]);
printf("\n");
}
int max(int alfa,int beta,int tau)
{
int mx=0;
if(alfa>mx) mx=alfa;
if(beta>mx) mx=beta;
if(tau>mx) mx=tau;
return mx;
}
int msol(int n)
{
int i;
best[0]=0;best[1]=0;best[2]=a[2]+a[1];
for(i=3;i<n;++i)
best[i]=max(best[i-1],best[i-2],best[i-3]+a[i]+a[i-1]);
return best[n-1];
}
int main()
{
FILE *in,*out;
in=fopen(INF,"r");
out=fopen(OUF,"w");
int i,n,s1,s2,s3;
fscanf(in,"%d",&n);
for(i=1;i<=n;++i) fscanf(in,"%d",v+i);
if(n==2){ ++n;v[n]=0;}
a[0]=0;
for(i=1;i<n;++i) a[i]=v[i];
//print(n);
s1=msol(n);
for(i=1;i<n;++i) a[i]=v[i+1];
//print(n);
s2=msol(n);
for(i=1;i<n-1;++i) a[i]=v[i+2];
a[n-1]=v[1];
//print(n);
s3=msol(n);
//printf("%d %d %d\n",s1,s2,s3);
fprintf(out,"%d",max(s1,s2,s3));
//scanf("%d",&i);
fclose(in);fclose(out);
return 0;
}