Cod sursa(job #1021239)

Utilizator SmarandaMaria Pandele Smaranda Data 3 noiembrie 2013 15:54:30
Problema Culori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>

using namespace std;

const long N = 600, MOD = 9901;

long dp [N][N], c [N];

int main (){
    long n, lim, i, j, k,d ;

    freopen ("culori.in", "r", stdin);
    freopen ("culori.out", "w", stdout);

    scanf ("%ld", &n);
    lim = 2 * n - 1;
    for (i = 1; i <= lim; i ++){
        scanf ("%ld", &c [i]);
        dp [i][i] = 1;
    }
    for (d = 1; d <= lim; d ++)
        for (i = 1; i <= lim; i ++){
            j = d + i;
            if ((j - i + 1) % 2 && c [j] == c [i]){
                for (k = i + 1; k < j; k ++)
                    if (c [i + 1] == c [k] && c [k + 1] == c [j]){
                        dp [i][j] = dp [i][j] + dp [i + 1][k] * dp [k + 1][j];
                        dp [i][j] = dp [i][j] % MOD;
                    }
            }
        }
    printf ("%ld\n", dp [1][lim]);
    return 0;
}