Cod sursa(job #935604)

Utilizator rudarelLup Ionut rudarel Data 4 aprilie 2013 11:03:31
Problema Oo Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#define fin  "oo.in"
#define fout "oo.out"
#define Nmax 100002

int N,ret,v[Nmax],best[Nmax];

inline void swap(int &a,int &b) { int aux; aux=a; a=b; b=aux; }

int go() {
int i,max=0;
	best[1]=0;
	best[2]=v[2]+v[1];
	best[3]=v[3]+v[2];

	for (i=4;i<N;++i) {
		best[i]=max+v[i]+v[i-1];
		if (best[i-2]>max) max=best[i-2];
	}
	max=0;
	for (i=1;i<N;++i) {
	//fprintf(stderr,"%i ",best[i]);
	       if (best[i]>max) max=best[i];
	}

	//fprintf(stderr,"\n");
	return max;	
}

int main() {
int i,j,tmp;
	freopen(fin,"r",stdin); freopen(fout,"w",stdout);
	scanf("%i",&N);
	for (i=1;i<=N;++i)
		scanf("%i",&v[i]);
	tmp=go();
	if (tmp>ret) ret=tmp;

	for (i=1;i<=N/2;++i) swap(v[i],v[N-i+1]);
	tmp=go();
	if (tmp>ret) ret=tmp;

	for (i=1;i<=N/2;++i) swap(v[i],v[N-i+1]);
 	for (i=N+1;i>1;--i) v[i]=v[i-1];
	v[1]=v[N+1];
	tmp=go();
	if (tmp>ret) ret=tmp;

	printf("%i\n",ret);

	fclose(stdin); fclose(stdout);
	return 0;
}