Pagini recente » Borderou de evaluare (job #3161569) | Cod sursa (job #732127) | Cod sursa (job #1984373) | Cod sursa (job #3254407) | Cod sursa (job #575328)
Cod sursa(job #575328)
#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;
}