Cod sursa(job #128021)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 25 ianuarie 2008 21:17:14
Problema Oo Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<stdio.h>

long  n, oo[122000], r1, r2, r3;
long  a[122000], rez;
long  max(long  x,long  y)
{
  return x>y?x:y;
}

int main()
{
  long  i, k, poz, j;
  freopen("oo.in","r",stdin);
  scanf("%ld",&n);
  for (i=0; i<n; i++) scanf("%ld",oo+i);
  if (n==2) rez=oo[0]+oo[1];

  else 
  {
	  r1 = oo[0] + oo[1];
	  k = r1;
	  a[1] = k;
	  poz = 1;
	  for (i = 3; i < n - 2; i++)
	  {
		  a[i] = k + oo[i+1] + oo[i];
		  for (j = i - 2; j > poz; j--)
			  if (a[j] > k) poz = j, k = a[j];
	  }
	  r1 = max (a[n - 2], k);

	  for (i = 0 ; i <= n; i++) a[i] = 0;

	  k = oo[1] + oo[2];
	  a[1] = k;
	  poz = 1;
	  for (i = 4; i < n - 1; i++)
	  {
		  a[i] = k + oo[i+1] + oo[i];
		  for (j = i - 2; j > poz; j--)
			  if (a[j] > k) poz = j, k = a[j];
	  }
	  r2 = max (a[n - 1], k);

		for (i = 0 ; i <= n; i++) a[i] = 0;

	  k = oo[n - 1] + oo[0];
	  a[1] = k;
	  poz = 1;
	  for (i = 2; i < n - 3; i++)
	  {
		  a[i] = k + oo[i+1] + oo[i];
		  for (j = i - 2; j > poz; j--)
			  if ( a[j] > k) poz = j, k = a[j];
	  }
	  r3 = max (a[n - 1], k);

	  rez = max(max(r1,r2),r3);
  }

  freopen("oo.out","w",stdout);
  printf("%ld\n",rez);
  return 0;
}