Pagini recente » Cod sursa (job #619154) | Cod sursa (job #2910498) | Cod sursa (job #359823) | Cod sursa (job #2320905) | Cod sursa (job #2606262)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("culori.in");
ofstream fout("culori.out");
const int NMAX = 256;
const long long MOD = 9901;
long long v[2 * NMAX], dp[2 * NMAX][2 * NMAX];
long long calc( int st, int dr ) {
if( v[st] != v[dr] ) {
dp[st][dr] = 0;
return dp[st][dr];
}
if( st > dr )
return 0;
if( dp[st][dr] != -1 )
return dp[st][dr];
if( st == dr ) {
dp[st][dr] = 1;
return dp[st][dr];
}
int color = v[st];
dp[st][dr] = calc(st + 1, dr - 1);
for( int i = st + 1; i <= dr - 1; i ++ ) {
if( v[i] == color ) {
dp[st][dr] =( dp[st][dr] + (calc(st, i) * calc(i, dr)) % MOD ) % MOD;
}
}
return dp[st][dr] % MOD;
}
int main() {
int n;
fin>>n;
for( int i = 1; i <= 2 * n - 1; i ++ )
fin>>v[i];
for( int i = 1; i <= 2 * n - 1; i ++ )
for( int j = 1; j <= 2 * n - 1; j ++ )
dp[i][j] = -1;
calc(1, 2*n - 1);
fout<<dp[1][2*n - 1];
return 0;
}