Cod sursa(job #2496199)

Utilizator MoodyFaresFares Mohamad MoodyFares Data 20 noiembrie 2019 13:36:40
Problema Culori Scor 48
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <cstdio>

using namespace std;

const int MAX_N = 5 * 256;
const int MOD = 9901;

int a[1 + MAX_N];
int dp[1 + MAX_N][1 + MAX_N];

int main() {
  freopen("culori.in", "r", stdin);
  freopen("culori.out", "w", stdout);

  int n;

  scanf("%d", &n);
  n = (2 * n) - 1;

  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    dp[i][i] = 1;
  }

  for (int sz = 2; sz <= n; sz++) {
    for (int i = 1; i + sz - 1 <= n; i++) {
      int j = i + sz - 1;

      if (a[i] != a[j])
        continue;

      for (int k = i; k <= j; k++) {
        /// i--k, k--j

        if (a[i] == a[k])
          dp[i][j] = (dp[i][j] + (dp[i + 1][k - 1] * dp[k][j]) % MOD) % MOD;
      }
    }
  }

  printf("%d\n", dp[1][n]);


  return 0;
}