Cod sursa(job #173594)

Utilizator floringh06Florin Ghesu floringh06 Data 7 aprilie 2008 21:03:15
Problema Culori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <cstdio>

using namespace std;

#define FIN "culori.in"
#define FOUT "culori.out"
#define MAX_N 260
#define MOD 9901

int A[MAX_N << 1][MAX_N << 1];

int N;
int C[MAX_N << 1];

    void solve ()
    {
         int i, j, k;
         
         // initializare dinamica
         for (i = 1; i <= (N << 1) - 1; ++i) A[i][i] = 1;
         
         // procesare
         for (i = (N << 1) - 1; i; --i) 
             for (j = i + 1; j <= (N << 1) - 1; ++j)
                 if (!((i + j) & 1) && C[i] == C[j])
                 {
                          for (k = i + 1; k < j; ++k)
                              if (C[i + 1] == C[k])
                                 A[i][j] += (A[i + 1][k] * A[k + 1][j]), A[i][j] %= MOD;          
                 }
         /*
         for (i = 1; i <= N*2 - 1; ++i)
         {
             for (j = 1; j <= N*2 - 1; ++j)
                 printf ("%d ", A[i][j]);
             printf ("\n");
         }*/
         printf ("%d\n", (int) A[1][(N << 1) - 1] % MOD);
    }

    int main ()
    {
        freopen (FIN, "r", stdin);
        freopen (FOUT, "w", stdout);
        
        scanf ("%d", &N);
        int i;
        for (i = 1; i <= (N << 1) - 1; ++i) scanf ("%d", C + i);
        
        solve ();
        
        return 0;
    }