Cod sursa(job #466600)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 27 iunie 2010 11:39:56
Problema Numarare Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 1 Marime 0.98 kb
#include <cstdio>
#include <string>
#include <cstring>
#define MAXN 100010

using namespace std;

int n, A[MAXN], val1[MAXN], val2[MAXN], i, j, st, dr;
long long V1[MAXN], V2[MAXN];
int main ()
{
	freopen ("numarare.in", "r", stdin);
	freopen ("numarare.out", "w", stdout);
	scanf ("%d", &n);
	for (i = 1; i <= n; i++) scanf ("%d", A + i);
	for (i = n; i >= 1; i--)
	{	
		memcpy (V2, V1, sizeof (V1));
		memcpy (val2, val1, sizeof (val1));
		memset (V1, 0, sizeof (V1));
		memset (val1, 0, sizeof (val1));
		for (j = i + 1; j <= n; j++)
		{	
			st = i; dr = j;
			//printf ("%d %d\n", st, dr);
			if ((st + dr - 1) & 1)
			{
				V1[dr] = max (V2[dr], V1[dr - 1]);
				continue;
			}
		//	printf ("%d %d\n", st, dr);
			
			if (st < dr - 1)
			{
				if (val2[dr - 1] == A[st] + A[dr])
				{
					V1[dr] = V2[dr - 1] + V1[dr - 1] + V2[dr] + 1;
					val1[dr] = val2[dr - 1];
				}
			}
			else if (st == dr - 1)
				V1[dr] = 1, val1[dr] = A[st] + A[dr];
		}
	}
	printf ("%lld\n", V1[n]);
	return 0;
}