Cod sursa(job #2333275)

Utilizator DavidLDavid Lauran DavidL Data 31 ianuarie 2019 20:18:29
Problema Culori Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 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 = 2; l <= 2 * n; l++)
        for (int i = 1; i < 2 * n; i++)
        {
            int j = i + l;
            if (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][k] * dp[k + 1][j - 1];
                        dp[i][j] %= MOD;
                    }
            }
        }

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

    return 0;
}