Cod sursa(job #1561426)
Utilizator | Bogdan Marin bogdanmarin69 | Data | 4 ianuarie 2016 01:54:37 |
---|---|---|---|
Problema | Culori | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.64 kb |
#include <fstream>
using namespace std;
ifstream cin("culori.in");
ofstream cout("culori.out");
const int MOD = 9901, MAX = 513;
int n, m, v[MAX], dp[MAX][MAX];
int main()
{
cin>>n;
m = 2*n-1;
for(int i=1; i<=m; i++)
cin>>v[i];
for(int i=1; i<=m; i++){
dp[i][i] = 1;
}
for(int lg = 3; lg<=m; lg += 2)
for(int i=1; i+lg-1<=m; i++){
int j = i+lg-1;
if(v[i]!=v[j]) continue;
for(int k=i+1; k<j; k += 2)
if(v[k+1]==v[i])
dp[i][j] = (dp[i][j] + dp[i+1][k]*dp[k+1][j])%MOD;
}
cout<<dp[1][m];
return 0;
}