Cod sursa(job #2606342)

Utilizator isa_tudor_andreiAndrei Tudor isa_tudor_andrei Data 27 aprilie 2020 15:58:27
Problema Culori Scor 44
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#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] = 0;
  for( int i = st; i <= dr; i ++ ) {
    if( v[i] == color ) {
      dp[st][dr] =( dp[st][dr] + (calc(st + 1, i - 1) * 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;
}