Cod sursa(job #22663)

Utilizator StTwisterKerekes Felix StTwister Data 27 februarie 2007 08:15:20
Problema Culori Scor 16
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#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);
    printf("%d\n", A[1][2*N-1]);
}