Cod sursa(job #19350)

Utilizator hellraizerChiperi Matei hellraizer Data 19 februarie 2007 12:40:47
Problema Culori Scor 16
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <stdio.h>

#define N_MAX 513

int n,c[N_MAX],a[N_MAX][N_MAX];

void citire(){
	FILE *fin=fopen("culori.in","r");
	fscanf(fin,"%d",&n);
	for (int i=1;i<=2*n-1;i++)
		fscanf(fin,"%d",&c[i]);
	fclose(fin);
}

int memoizare(int x,int y){
	if (x==y){
		a[x][x]=1;
		return 1;
	}
	if (c[x]!=c[y]||(x+y)%2)
		return 0;
	if (a[x][y])
		return a[x][y];
	for (int k=x+1;k<y;k++)
		a[x][y]+=memoizare(x+1,k)*memoizare(k+1,y);
	return a[x][y];
}

void afisare(){
	FILE *fout=fopen("culori.out","w");
	fprintf(fout,"%d\n",a[1][2*n-1]);
	fclose(fout);
}

int main(){
	citire();
	memoizare(1,2*n-1);
	afisare();
	return 0;
}