Cod sursa(job #1660615)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 23 martie 2016 11:48:43
Problema Culori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
#include <vector>

using namespace std;

const int NMAX = 2 * 260;
const int mod = 9901;

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

int main()
{
    ifstream cin("culori.in");
    ofstream cout("culori.out");

    int n = 0;
    cin >> n;
    n = 2 * n - 1;

    for (int i = 1; i <= n; ++ i)
        cin >> v[i];

    vector <int> poss;
    for (int i = n; i; -- i) {
        dp[i][i] = 1;
        poss.clear();
        poss.push_back(i);

        for (int j = i + 1; j <= n; ++ j)
            if (v[i] == v[j]) {
                poss.push_back(j);

                for (auto it: poss)
                    dp[i][j] = (dp[i][j] + dp[i + 1][it - 1] * dp[it][j]) % mod;
            }
    }

    cout << dp[1][n] << '\n';

    cin.close();
    cout.close();
    return 0;
}