Cod sursa(job #121652)

Utilizator megabyteBarsan Paul megabyte Data 9 ianuarie 2008 12:19:32
Problema Oo Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#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;
}