Cod sursa(job #1280904)

Utilizator timicsIoana Tamas timics Data 2 decembrie 2014 17:55:33
Problema Culori Scor 48
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<stdio.h>
#include<iostream>
#define MOD 9901
using namespace std;
int a[600],N,d[600][600],viz[600][600];

void solve(int i, int j) {
    viz[i][j] = 1;
    if(a[i]!=a[j]) {
        return;
    }
    if(i==j) {
        d[i][j] = 1;
        return;
    }

    if(!viz[i+1][j-1]) {
        solve(i+1,j-1);
    }
    d[i][j] = d[i+1][j-1];
    
    for(int k=i+2;k<=j-2;++k) {
        if(a[k]==a[j]) {
            if(!viz[i+1][k-1]) {
                solve(i+1,k-1);
            }
            if(!viz[k][j]) {
                solve(k,j);
            }
            d[i][j] = (d[i][j] + d[i+1][k-1]*d[k][j])%MOD;
        }
    }
}

int main() {
    freopen("culori.in","r",stdin);
    freopen("culori.out","w",stdout);
    scanf("%d",&N);
    for(int i=1;i<=2*N-1;++i) {
        scanf("%d",&a[i]);
    } 
    solve(1,2*N-1);
    printf("%d\n",d[1][2*N-1]);
    return 0;
}