Cod sursa(job #2496145)

Utilizator MoodyFaresFares Mohamad MoodyFares Data 20 noiembrie 2019 11:56:10
Problema Culori Scor 24
Compilator cpp-64 Status done
Runda casiaiziscanudaisimulareprimaora Marime 0.78 kb
#include <cstdio>

using namespace std;

const int MAX_N = 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] || (i - j + 1) % 2 == 0)
        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;
}