Cod sursa(job #2496188)

Utilizator mihneacazCazacu Mihnea mihneacaz Data 20 noiembrie 2019 13:14:53
Problema Culori Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <cstdio>

using namespace std;

const int NMAX = 520;
const int MOD = 9901;

int v[NMAX];
int dp[NMAX][NMAX];

int main()
{
    freopen("culori.in", "r", stdin);
    freopen("culori.out", "w", stdout);
    int n;
    scanf("%d", &n);
    for(int i = 1; i <= n * 2 - 1; ++i) {
        scanf("%d", &v[i]);
    }
    if(v[1] != v[n * 2 - 1]) {
        printf("0\n");
        return 0;
    }
    for(int i = 1; i <= n * 2 - 1 ; ++i)
        dp[i][i] = 1;
    for(int len = 3; len <= 2 * n - 1; len += 2) {
        for(int st = 1; st + len - 1 <= 2 * n - 1; ++st)
        {
            int dr = st + len - 1;
            if(v[st] == v[dr]) {
                for(int t = st + 1; t < dr; t++)
                    dp[st][dr] = (dp[st][dr] + dp[st+1][t] * dp[t+1][dr]) % MOD;
            }

    }
    printf("%d\n", dp[1][2 * n - 1]);
    return 0;
}