Cod sursa(job #25899)

Utilizator goguGogu Marian gogu Data 4 martie 2007 15:58:13
Problema Culori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#define MOD 9901
#define MOD2 (MOD*MOD)

unsigned short s[512][512], cul[512];
char ok[512][512];

unsigned short sol(int x, int y)
{
         if (ok[x][y]) return s[x][y];
         ok[x][y]=1;
         unsigned rez=0;         
         if (cul[x]==cul[y]){
            rez=sol(x+1, y-1);
            for (int i=x+2; i<y-1; i+=2)
                if (cul[i]==cul[x]){
                   rez+=sol(x+1,i-1)*sol(i,y);
                   if (rez>MOD2) rez-=MOD2;
                }
         }
         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);
    for (i=1; i<2*n; i++)
        for (int j=0; j<=i; j++)
            ok[i][j]=s[i][j]=1;
    for (i=1; i<2*n; i++)
        scanf("%d", cul+i);
    printf("%d\n", sol(1, 2*n-1));
    return 0;
}