Pagini recente » Cod sursa (job #1886558) | Cod sursa (job #1659725) | Cod sursa (job #749455) | Cod sursa (job #2853041) | Cod sursa (job #49692)
Cod sursa(job #49692)
/* Ivan Nicolae - Bucuresti */
#include <stdio.h>
#include <string.h>
#define NMAX 100000
#define Infinity 0x3f3f3f3f
#define max2(a,b) ((a>b) ? (a) : (b))
#define max3(a,b,c) (max2(max2(a,b),c))
long i,j,n,m,A[NMAX+2],S[NMAX+2];
void ReadData(void)
{
freopen("oo.in","r",stdin);
scanf("%ld",&n); long i;
for (i=1;i<=n;i++)
scanf("%ld",&A[i]);
fclose(stdin);
}
int GetSum(long li, long ls)
{
long i,maxim=0;
memset(S,0,sizeof(S));
S[li]=A[li-1]+A[li];
S[li+1]=A[li]+A[li+1];
S[li+2]=A[li+1]+A[li+2];
// maxim=S[li];
for (i=li+3;i<=ls;i++)
{
S[i]=(A[i]+A[i-1]) + maxim;
if (S[i-2] > maxim)
maxim=S[i-2];
}
long rez=-Infinity;
for (i=li;i<=ls;i++)
if (S[i] > rez)
rez=S[i];
/* rez=S[ls];*/
return rez;
}
void PrintData(long s1,long s2,long s3)
{
freopen("oo.out","w",stdout);
printf("%ld",max3(s1,s2,s3));
fclose(stdout);
}
int main()
{
ReadData();
// A[0]=A[n];
long s1=GetSum(3,n-2) + (A[1]+A[n]);
long s2=GetSum(1,n-1);// + (A[1]+A[2]);
long s3=GetSum(2,n);// + (A[n]+A[n-1]);
PrintData(s1,s2,s3);
return 0;
}