Cod sursa(job #575328)

Utilizator Andreid91Ciocan Andrei Andreid91 Data 8 aprilie 2011 10:13:04
Problema Culori Scor 36
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<fstream>
#include<iostream>

#define mod 9901

using namespace std;

int n,a[300],v[300][300],sw[300][300];

void best (int i, int j)
{
	sw[i][j]=1;
	if (i==j)
		v[i][i]=1;
	else
		if (j-i==2)
		{
			sw[i+1][i+1]=1;v[i+1][i+1]=1;
			if (a[i]==a[j])
				v[i][j]=1;
		}
		else
		if (a[i]==a[j] && (j-i)%2==0)
		{
			for (int k=j-2;k>i+1;k-=2)
				if (a[i]==a[k] && a[j-1]==a[k+1])
				{
					if (sw[i][k]==0)
						best(i,k);
					if (sw[k+1][j-1]==0)
						best(k+1,j-1);
					v[i][j]+=v[i][k]*v[k+1][j-1];
				}
			if (sw[i+1][j-1]==0)
				best(i+1,j-1);
			v[i][j]+=v[i+1][j-1];
			v[i][j]%=mod;
		}
}

void citire()
{
	int i;
	ifstream f("culori.in");
	f>>n;
	for (i=1;i<=2*n-1;i++)
		f>>a[i];
	
	f.close();
}

void afisare()
{
	ofstream g("culori.out");
	g<<v[1][2*n-1];
}

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