Mai intai trebuie sa te autentifici.
Cod sursa(job #59561)
Utilizator | Data | 9 mai 2007 18:47:42 | |
---|---|---|---|
Problema | Culori | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.76 kb |
#include <stdio.h>
#include <bitset>
#define MOD 9901
using namespace std;
unsigned s[512][512], c[512];
bitset<512> ok[512];
unsigned mem(int x, int y)
{
if(ok[x][y])
return s[x][y];
ok[x][y]=1;
int rez=0;
if(c[x]==c[y])
{
rez=mem(x+1, y-1);
int i;
for(i=x+2;i<y;i+=2)
if(c[x]==c[i])
{
rez+=mem(x+1,i-1)*mem(i,y);
rez %=MOD;
}
}
s[x][y]=rez%MOD;
return s[x][y];
}
int main()
{
freopen("culori.in","r",stdin);
freopen("culori.out","w",stdout);
int i,n;
scanf("%d", &n);
n*=2;
for(i=1; i<n; i++)
for(int j=0; j<=i; j++)
ok[i][j]=1,s[i][j]=1;
for(i=1; i<n; i++)
scanf("%d", c+i);
printf("%d\n", mem(1,n-1));
return 0;
}