Cod sursa(job #23795)

Utilizator victorsbVictor Rusu victorsb Data 1 martie 2007 13:59:28
Problema Culori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>

#define Nmax 512

const int modul = 9901;
int n;
int sir[Nmax], a[Nmax][Nmax];

void citire()
{
    int i;
    scanf("%d\n", &n);
    n = 2 * n - 1;
    for (i = 1; i <= n; ++i)
        scanf("%d ", &sir[i]);
}

void solve()
{
    int i, j, k, d;
    for (i = 1; i <= n; ++i)
        a[i][i] = 1;
    for (d = 1; d <= n; ++d)
        for (i = 1; i + d <= n; ++i)
        {
            j = i + d;
            if (sir[i] == sir[j])
            {
                for (k = i + 1; k < j; ++k)
                    if (sir[k] == sir[i])
                    {
                        a[i][j] += a[i][k] * a[k+1][j-1];
                        a[i][j] %= modul;
                    }
                a[i][j] += a[i+1][j-1];
                if (a[i][j] >= modul)
                    a[i][j] -= modul;
            }
        }
    printf("%d\n", a[1][n]);
}

int main()
{
    freopen("culori.in", "r", stdin);
    freopen("culori.out", "w", stdout);
    citire();
    solve();
    return 0;
}