Cod sursa(job #35577)

Utilizator vrajalaMihai Viteazu, razboinicu luminii vrajala Data 22 martie 2007 10:46:47
Problema Oo Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdlib.h>
#include <stdio.h>

#define Nmax 100000

long N,b0[Nmax],b1[Nmax],b2[Nmax],i,max;
int x[Nmax];

int main()
{
 freopen("oo.in","r",stdin);
 scanf("%d\n",&N);
 for (i=0;i<N;++i)
     scanf("%d",&x[i]);
 fclose(stdin);
 freopen("oo.out","w",stdout);
 if (N==2)
    {
    printf("%d",x[0]+x[1]);
    fclose(stdout);
    exit(0);
    }
 b0[1]=x[0]+x[1];
 b0[2]=0;
 b1[1]=0;
 b1[2]=x[1]+x[2];
 b0[3]=0;
 b0[4]=b0[1]+x[3]+x[4];
 b1[3]=x[2]+x[3];
 b1[4]=x[3]+x[4];
 b2[0]=x[N-1]+x[0];
 b2[1]=0;
 b2[2]=0;
 b2[3]=b2[0]+x[2]+x[3];
 b2[4]=b2[0]+x[3]+x[4];
 for (i=5;i<N;++i)
     {
     b0[i]=b0[i-3];
     if (b0[i-4]>b0[i]) b0[i]=b0[i-4];
     if (b0[i-5]>b0[i]) b0[i]=b0[i-5];
     b0[i]+=x[i-1]+x[i];
     b1[i]=b1[i-3];
     if (b1[i-4]>b1[i]) b1[i]=b1[i-4];
     if (b1[i-5]>b1[i]) b1[i]=b1[i-5];
     b1[i]+=x[i-1]+x[i];
     b2[i]=b2[i-3];
     if (b2[i-4]>b2[i]) b2[i]=b2[i-4];
     if (b2[i-5]>b2[i]) b2[i]=b2[i-5];
     b2[i]+=x[i-1]+x[i];
     }
 b0[N-1]=0;
 b2[N-1]=0;
 b2[N-1]=0;
 b2[N-2]=0;
 for (i=0;i<N;++i)
     {
     if (b0[i]>max) max=b0[i];
     if (b1[i]>max) max=b1[i];
     }
 printf("%ld",max);
 fclose(stdout);
 return 0;
}