Cod sursa(job #1280888)

Utilizator MKLOLDragos Ristache MKLOL Data 2 decembrie 2014 17:44:46
Problema Culori Scor 48
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
#define MOD 9901
int v[666];
int N;
int viz[666][666];
int din[666][666];

void calc(int x,int y){
    if((y-x+1) % 2 == 0)
        return;
    //printf("%d %d\n",x,y);
    if(y - x == 0){
        din[x][y]=1;
        return;
    }

    if(v[x] != v[y])
        return;
    if(viz[x][y])
        return;
    viz[x][y]=1;

    calc(x+1,y-1);
    din[x][y] += din[x+1][y-1];
    din[x][y] %= MOD;
    for(int i=x+2;i<y-1;++i){
        if(v[x] == v[i] && v[x+1] == v[i-1]){
            calc(x+1,i-1);
            calc(i,y);
            din[x][y] += (din[x+1][i-1] * din[i][y]);
        }
        din[x][y] %= MOD;
    }
}

int main(){
    freopen("culori.in","r",stdin);
    freopen("culori.out","w",stdout);
    scanf("%d",&N);
    N=N*2-1;
    for(int i=1;i<=N;++i){
        scanf("%d",&v[i]);
    }
    calc(1,N);
    printf("%d\n",din[1][N]);
}