Cod sursa(job #97964)

Utilizator savimSerban Andrei Stan savim Data 9 noiembrie 2007 17:35:05
Problema Oo Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
long n,i,j,k,max;
long d1[100000],d2[100000],d3[100000],a[100000],din[100000];

int main()
{

	freopen("oo.in","r",stdin);
	freopen("oo.out","w",stdout);

	scanf("%ld",&n);
	for (i=1; i<=n; i++)
	{
		scanf("%ld",&a[i]);
		d1[i]=a[i];
	}
	for (i=2; i<=n; i++)
		d2[i]=a[i-1];
	d2[1]=a[n];

	for (i=1; i<=n-1; i++)
		d3[i]=a[i+1];
	d3[n]=a[1];

	din[0]=0;din[1]=0;
	for (i=2; i<=n-1; i++)
	{
		k=din[i-2];
		if (din[i-1]>k) k=din[i-1];
		if (din[i-3]+d1[i-1]+d1[i]>k) k=din[i-3]+d1[i-1]+d1[i];
		din[i]=k;
	}
	if (din[n-1]>max) max=din[n-1];

	din[0]=0;din[1]=0;
	for (i=1; i<=n-1; i++)
	{
		k=din[i-2];
		if (din[i-1]>k) k=din[i-1];
		if (din[i-3]+d2[i-1]+d2[i]>k) k=din[i-3]+d2[i-1]+d2[i];
		din[i]=k;
	}
	if (din[n-1]>max) max=din[n-1];

	din[0]=0;din[1]=0;
	for (i=1; i<=n-1; i++)
	{
		k=din[i-2];
		if (din[i-1]>k) k=din[i-1];
		if (din[i-3]+d3[i-1]+d3[i]>k) k=din[i-3]+d3[i-1]+d3[i];
		din[i]=k;
	}
	if (din[n-1]>max) max=din[n-1];

	printf("%ld",max);
	return 0;
}