Cod sursa(job #897389)

Utilizator Catah15Catalin Haidau Catah15 Data 27 februarie 2013 20:20:46
Problema Culori Scor 48
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

#define maxN 520
#define MOD 9901

int C[maxN], DP[maxN][maxN];


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

    int N;
    scanf ("%d", &N);

    N = N * 2 - 1;
    for (int i = 1; i <= N; ++ i)
    {
        scanf ("%d", &C[i]);
        DP[i][i] = 1;
    }

    for (int l = 2; l < N; l += 2)
        for (int i = 1; i <= N - l; ++ i)
        {
            if (C[i] != C[i + l]) continue;

            for (int k = i + 1; k < i + l; ++ k)
            {
                if (C[i + 1] != C[k]) continue;
                DP[i][i + l] += DP[i + 1][k] * DP[k + 1][i + l];
            }
            DP[i][i + l] %= MOD;
        }

    printf ("%d", DP[1][N]);

    return 0;
}