Pagini recente » Cod sursa (job #1628421) | Cod sursa (job #2689415) | Cod sursa (job #692159) | Cod sursa (job #304257) | Cod sursa (job #49666)
Cod sursa(job #49666)
/* 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));
for (i=li;i<=ls;i++)
{
S[i]=(A[i]+A[i-1]) + maxim;
if (S[i-3] > 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();
long s1=GetSum(3,n-2);// + (A[1]+A[n]);
long s2=GetSum(1,n-1);// + (A[1]+A[2]);
long s3=GetSum(3,n);// + (A[n]+A[n-1]);
PrintData(s1,s2,s3);
return 0;
}