Cod sursa(job #311880)

Utilizator FlorianFlorian Marcu Florian Data 4 mai 2009 16:36:33
Problema Culori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
using namespace std;
#include<cstdio>
#define MAX_N 256
#define Mod 9901
long long A[512][512];
long long C[512];
long long N;
void read()
{
	freopen("culori.in","r",stdin);
	freopen("culori.out","w",stdout);
	scanf("%lld",&N);
	int i;
	N = 2*N - 1;
	for(i=1;i <= N;++i)
		scanf("%lld",&C[i]);
}
void dp()
{
	long long start, i,j,k, x;
	for( start = 0; start <= N; start+=2)
	{
		for(x = 1; x+start<=N; ++x)		
		{
			i = x; j = start + x;
			if(i == j) { A[i][j] = 1; continue; }
			if(C[i]!=C[j]) { A[i][j] = 0; continue; }
			for(k = i+1; k<j; ++k)
				if(C[i+1] == C[k]) 
					{
					A[i][j] += A[i+1][k] * A[k+1][j];
					A[i][j] %= Mod;
					}
			
		}
	}	
	printf("%lld\n",A[1][N]);
}
int main()
{
	read();
	dp();
	return 0;
}