Cod sursa(job #311830)

Utilizator FlorianFlorian Marcu Florian Data 4 mai 2009 14:33:39
Problema Culori Scor 24
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
using namespace std;
#include<cstdio>
#define MAX_N 258
#define Mod 9901
int A[2 * MAX_N+1][2 * MAX_N+1];
int C[2 * MAX_N + 1];
int N;
void read()
{
	freopen("culori.in","r",stdin);
	freopen("culori.out","w",stdout);
	scanf("%d",&N);
	int i;
	for(i=1;i < 2 * N;++i)
		{
		scanf("%d",&C[i]);
		A[i][i] = 1;
		}
}
void dp()
{
	int i,j,k, c = 2, l = 2 * N - 1;
	i = 1;
	j = 2;
	while(i != 1 || j != 2*N-1 )
	{
		if( i == l) { i = 1; --l; }
		if(i == 1) { j = c; ++c; }
		if(l <= 0 || j > 2*N-1 || i > 2*N-1) break;
		if(C[i] == C[j])
			for(k = i+1; k<j; ++k)
				if(C[k+1] == C[j]) 
					{
					A[i][j] += A[i+1][k] * A[k+1][j];
					if(A[i][j] >= Mod) A[i][j] -= Mod;
					}
		++i; 
		++j;
	}
	printf("%d\n",A[1][2*N-1]);
}
int main()
{
	read();
	dp();
	return 0;
}