Cod sursa(job #19341)

Utilizator MariusMarius Stroe Marius Data 19 februarie 2007 12:32:15
Problema Culori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <cstdio>
using namespace std;

const char iname[] = "culori.in";
const char oname[] = "culori.out";

#define MAX_N 512

int R[MAX_N][MAX_N];


int main(void)
{
	freopen(iname, "r", stdin);
	int n;
	int C[MAX_N];
	int i;
	int j;
	int k;
	int d;
	for (scanf("%d", & n), i = 1; i <= 2 * n - 1; ++ i)
		scanf("%d", C + i);
	for (i = 1; i <= 2 * n - 1; ++ i)
		R[i][i] = 1;
	for (d = 1; d <= 2 * n - 2; ++ d) {
		for (i = 1; i <= 2 * n - 1 - d; ++ i) {
			j = i + d;
			if (C[i] != C[j])
				continue ;
			if ((i + j) & 1)
				continue ;
			for (k = i + 1; k < j; ++ k) {
				if (C[i + 1] == C[k])
					R[i][j] = (R[i][j] + R[i + 1][k] * R[k + 1][j]) % 9901;
			}
		}
	}
	freopen(oname, "w", stdout);
	printf("%d\n", R[1][2 * n - 1]);
	return 0;
}