Cod sursa(job #332408)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 17 iulie 2009 18:30:55
Problema Oo Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <stdio.h> 
#define N 100100
int n,i,maxc,sol,v[N],c[N],b[N],Max1(),Max2(),Max3(),Max4(),Max5();  
void read(),solve();
int main()   
{   
	read();
	solve();
	return 0;
}
void read()
{
	freopen("oo.in","r",stdin);
	freopen("oo.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&v[i]);
	c[1]=v[n]+v[1];maxc=c[1];
	for(i=2;i<=n;i++)
	{
		c[i]=v[i]+v[i-1];
		maxc=maxc>c[i]?maxc:c[i];
	}
}
void solve()
{
	if(n==6)
	{
		maxc=c[1]+c[4]>c[2]+c[5]?c[1]+c[4]:c[2]+c[5];
		maxc=maxc>c[3]+c[6]?maxc:c[3]+c[6];
	}
	if(n<=6){printf("%d\n",maxc);return;}
	sol=Max1();
	maxc=Max2();sol=sol>maxc?sol:maxc;
	maxc=Max3();sol=sol>maxc?sol:maxc;
	maxc=Max4();sol=sol>maxc?sol:maxc;
	maxc=Max5();sol=sol>maxc?sol:maxc;
	printf("%d\n",sol);
}
int Max1()
{
	int ret=0;//culeg 1
	b[1]=c[1];b[2]=0;b[3]=0;b[4]=c[1]+c[4];b[5]=c[1]+c[5];
	ret=b[4]>b[5]?b[4]:b[5];
	for(i=6;i<=n-2;i++)
	{
		b[i]=b[i-3]>b[i-4]?b[i-3]:b[i-4];
		b[i]=b[i]>b[i-5]?b[i]:b[i-5];
		b[i]+=c[i];
		ret=ret>b[i]?ret:b[i];
	}
	return ret;
}
int Max2()
{
	int ret=0;//culeg 2
	b[1]=0;b[2]=c[2];b[3]=0;b[4]=0;b[5]=c[2]+c[5];ret=b[5];
	for(i=6;i<=n-1;i++)
	{
		b[i]=b[i-3]>b[i-4]?b[i-3]:b[i-4];
		b[i]=b[i]>b[i-5]?b[i]:b[i-5];
		b[i]+=c[i];
		ret=ret>b[i]?ret:b[i];
	}
	return ret;
}
int Max3()
{
	int ret=0;//culeg 3
	b[1]=0;b[2]=0;b[3]=c[3];b[4]=0;b[5]=0;ret=b[3];
	for(i=6;i<=n;i++)
	{
		b[i]=b[i-3]>b[i-4]?b[i-3]:b[i-4];
		b[i]=b[i]>b[i-5]?b[i]:b[i-5];
		b[i]+=c[i];
		ret=ret>b[i]?ret:b[i];
	}
	return ret;
}
int Max4()
{
	int ret=0;//culeg 4
	b[1]=0;b[2]=0;b[3]=0;b[4]=c[4];b[5]=0;b[6]=0;ret=b[4];
	for(i=7;i<=n;i++)
	{
		b[i]=b[i-3]>b[i-4]?b[i-3]:b[i-4];
		b[i]=b[i]>b[i-5]?b[i]:b[i-5];
		b[i]+=c[i];
		ret=ret>b[i]?ret:b[i];
	}
	return ret;
}
int Max5()
{
	int ret=0;//culeg 4
	b[1]=0;b[2]=0;b[3]=0;b[4]=0;b[5]=c[5];b[6]=0;b[7]=0;ret=b[5];
	for(i=8;i<=n;i++)
	{
		b[i]=b[i-3]>b[i-4]?b[i-3]:b[i-4];
		b[i]=b[i]>b[i-5]?b[i]:b[i-5];
		b[i]+=c[i];
		ret=ret>b[i]?ret:b[i];
	}
	return ret;
}