Cod sursa(job #600747)

Utilizator SpiderManSimoiu Robert SpiderMan Data 2 iulie 2011 23:45:59
Problema Culori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
# include <cstdio>
# include <cstring>

const char *FIN = "culori.in", *FOU = "culori.out";
const int MAX = 600, MOD = 9901;

int C[MAX], dp[MAX][MAX];
int N;

inline int _mod (int A) {
    if (A >= MOD) A -= MOD;
    if (A >= MOD) A %= MOD;
    return A;
}

int main (void) {
    freopen (FIN, "r", stdin);

    scanf ("%d", &N), N <<= 1, --N;
    for (int i = 1; i <= N; ++i)
        scanf ("%d", C + i), dp[i][i] = 1;
    for (int I = 2; I <= N; ++I) {
        for (int i = 1; i <= N - I + 1; ++i) {
            int j = i + I - 1;
            dp[i][j] = 0;
            if ((I & 1) && C[i] == C[j]) {
                for (int k = i; k < j; k += 2)
                    if (C[i] == C[k]) {
                        dp[i][j] += dp[i][k] * dp[k + 1][j - 1];
                        dp[i][j] = _mod (dp[i][j]);
                    }
            }
        }
    }
    fprintf (fopen (FOU, "w"), "%d", dp[1][N]);
}