Pagini recente » Cod sursa (job #1252704) | Cod sursa (job #922096) | Cod sursa (job #700012) | Cod sursa (job #2510655) | Cod sursa (job #2333258)
#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;
}