Cod sursa(job #92670)

Utilizator c_sebiSebastian Crisan c_sebi Data 16 octombrie 2007 15:17:22
Problema Oo Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>

int i, n, a[100001], smax[100001];

int main(){

	long long mm;
	a[0]=0;
	FILE *f = fopen("oo.in", "r");
	fscanf(f, "%d", &n);
	for(i=1; i<=n; ++i) fscanf(f, "%d", &a[i]);
	fclose(f);

	//case 1
	smax[0]=smax[1]=0; smax[2]=smax[3]=a[1]+a[2];
	for(i=4; i<n; ++i){
		smax[i]=smax[i-2];
		if(a[i]+a[i-1]+smax[i-3] > smax[i-2])
			smax[i] = a[i] + a[i-1] + smax[i-3];
	}
	mm=smax[n-1];

	//case 2
	smax[0]=smax[1]=smax[2]=0; smax[3]=smax[4]=a[2]+a[3];
	a[n+1]=a[1];
	for(i=5; i<=n+1; ++i){
		smax[i]=smax[i-2];
		if(a[i]+a[i-1]+smax[i-3] > smax[i-2])
		smax[i] = a[i] + a[i-1] + smax[i-3];
	}
	if(mm<smax[n+1]) mm=smax[n+1];

	//case 3
	a[0]=a[n];
	smax[0]=0; smax[1]=a[1]+a[0];
	smax[2]=smax[1];
	for(i=3; i<n; ++i){
		smax[i]=smax[i-2];
		if(a[i]+a[i-1]+smax[i-3] > smax[i-2])
			smax[i] = a[i] + a[i-1] + smax[i-3];
	}
	if(mm<smax[n-1]) mm=smax[n-1];

	FILE *g=fopen("oo.out", "w");
	fprintf(g, "%lld\n", mm);
	fclose(g);
	return 0;
}