Cod sursa(job #2333258)

Utilizator DavidLDavid Lauran DavidL Data 31 ianuarie 2019 20:07:15
Problema Culori Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fi("culori.in");
ofstream fo("culori.out");

const int NMAX = 600;
const int MOD = 9901;

int dp[NMAX][NMAX];
int s[NMAX];
int n;

int main()
{
    fi >> n;
    for (int i = 1; i < 2 * n; i++)
        fi >> s[i];

    for (int i = 1; i < 2 * n; i++)
        dp[i][i] = 1;

    for (int l = 1; l <= 2 * n; l++)
    {
        for (int i = 1; i < 2 * n; i++)
        {
            int j = i + l;
            if (j < i + 2 || j >= 2 * n)
                continue;

            if (s[i] == s[j])
            {
                dp[i][j] = dp[i + 1][j - 1]; // du-te-n jos si hai inapoi
                for (int k = i + 2; k <= j - 2; k++) // un punct intermediar in care ne-am intors in radacina
                    if (s[i] == s[k])
                    {
                        dp[i][j] += dp[i + 1][k - 1] * dp[k + 1][j - 1];
                        dp[i][j] %= MOD;
                    }
            }
        }
    }

    fo << dp[1][2 * n - 1];

    return 0;
}