Pagini recente » Cod sursa (job #1423993) | Cod sursa (job #2365894) | Cod sursa (job #1406537) | Cod sursa (job #3173497) | Cod sursa (job #22678)
Cod sursa(job #22678)
#include <stdio.h>
#include <string>
#define NMAX 2*256
int N;
int C[NMAX];
int A[NMAX][NMAX];
void calc(int i, int j)
{
if (C[i] != C[j])
{
A[i][j] = 0;
return;
}
int S = 0;
if (j<=i)
{
if (j==i)
A[i][j] = 1;
else
A[i][j] = 0;
return;
}
for (int k = i+1; k<j; ++k)
{
if (C[i+1] == C[k])
{
if (!A[i+1][k])
calc(i+1,k);
if (!A[k+1][j])
calc(k+1,j);
S += A[i+1][k]*A[k+1][j];
}
}
A[i][j] = S;
}
int main()
{
freopen("culori.in", "r", stdin);
freopen("culori.out", "w", stdout);
memset(A, 0, sizeof(A));
scanf("%d", &N);
for (int i = 1; i<=2*N-1; ++i)
{
scanf("%d", &C[i]);
}
//calc(1, 2*N-1);
for (int i = 1; i<=2*N-1; ++i)
A[i][i] = 1;
for (int L=2; L<=2*N-1; L+=2)
{
for (int i = 1; i<=2*N-1; ++i)
{
int j = i+L;
A[i][j] = 0;
for (int k = i+1; k<j; ++k)
{
if (C[i+1] == C[k])
A[i][j] += A[i+1][k]*A[k+1][j];
}
}
}
printf("%d\n", A[1][2*N-1]);
}