Cod sursa(job #18193)

Utilizator gcosminGheorghe Cosmin gcosmin Data 18 februarie 2007 10:31:34
Problema Culori Scor 4
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasa a 10-a Marime 0.71 kb
#include <stdio.h>

#define MOD 9901
#define NMAX 600

int N;

int a[NMAX];

int nr[NMAX][NMAX];
char viz[NMAX][NMAX];

int calc(int x, int y)
{
	if (viz[x][y]) return nr[x][y];
	if (x > y) return 0;
	viz[x][y] = 1;
	if (a[x] != a[y]) return 0;

	if (x == y) return nr[x][y] = 1;

	nr[x][y] = calc(x + 1, y - 1);

	int i;
	for (i = x + 1; i <= y - 1; i++) 
		if (a[i] == a[x]) {
			nr[x][y] += calc(x + 1, i - 1) * calc(i + 1, y - 1);
			nr[x][y] %= MOD;
		}

return nr[x][y];	
}

int main()
{
	int i;
	
	freopen("culori.in", "r", stdin);
	freopen("culori.out", "w", stdout);

	scanf("%d", &N);

	for (i = 1; i < 2 * N; i++) scanf("%d", &a[i]);

	printf("%d\n", calc(1, 2 * N - 1));

fclose(stdin);
fclose(stdout);
return 0;
}