Cod sursa(job #22839)

Utilizator filipbFilip Cristian Buruiana filipb Data 27 februarie 2007 17:35:34
Problema Culori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>
#define MOD 9901
#define NMax 258

int N, v[2 * NMax - 1];
int D[2*NMax][2*NMax];

int main(void)
{
    int i, j, k, d;
    
    freopen("culori.in", "r", stdin);
    freopen("culori.out", "w", stdout);    
    
    scanf("%d", &N);
    for (i = 1; i <= 2 * N - 1; i++)
        scanf("%d", &v[i]);
    N = 2 * N - 1;
        
    for (i = 1; i <= N; i++) D[i][i] = 1;
        
    for (d = 2; d <= N; d++)
        for (i = 1; i <= N-d+1; i++)
        {
            j = i+d-1;
            if (v[i] != v[j]) continue;
            
            D[i][j] = D[i+1][j-1];            
            for (k = i+1; k < j; k++)
                if (v[k] == v[i]) // prima aparitie a fiului
                   D[i][j] = (D[i][j] + D[i+1][k-1] * D[k][j]) % MOD;
            
        }
    
    printf("%d\n", D[1][N]);
    
    return 0;
}