Pagini recente » Cod sursa (job #1805456) | Cod sursa (job #2120868) | Cod sursa (job #1632839) | Cod sursa (job #2208761) | Cod sursa (job #18982)
Cod sursa(job #18982)
#include <stdio.h>
#define nm 520
#define mod 9901
void find(int, int);
int n, a[nm], mat[nm][nm], c[nm][nm];
int main()
{
int i, j;
freopen("culori.in", "r", stdin);
freopen("culori.out", "w", stdout);
scanf("%d", &n);
for (i = 1; i <= 2 * n - 1; ++i)
{
scanf("%d", &a[i]);
mat[a[i]][++mat[a[i]][0]] = i;
}
for (i = 1; i <= 2 * n - 1; ++i)
for (j = i; j <= 2 * n - 1; ++j)
c[i][j] = -1;
find(1, 2 * n - 1);
printf("%d\n", c[1][2 * n - 1]);
return 0;
}
void find(int x, int y)
{
int i;
if (a[x] != a[y])
{
c[x][y] = 0;
return;
}
if (x == y)
{
c[x][y] = 1;
return;
}
if (c[x + 1][y - 1] == -1)
find(x + 1, y - 1);
c[x][y] = c[x + 1][y - 1];
for (i = 1; i <= mat[a[x]][0]; ++i)
if (mat[a[x]][i] > x && mat[a[x]][i] < y)
{
if (c[x + 1][mat[a[x]][i] - 1] == -1)
find(x + 1, mat[a[x]][i] - 1);
if (c[mat[a[x]][i]][y] == -1)
find(mat[a[x]][i], y);
c[x][y] = (c[x][y] + c[x + 1][mat[a[x]][i] - 1] * c[mat[a[x]][i]][y]) % mod;
}
}