Cod sursa(job #1133328)

Utilizator andrei.sfrentSfrent Andrei andrei.sfrent Data 4 martie 2014 19:07:58
Problema Culori Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <cstdio>

using namespace std;

#define MOD 9901

int N;
int v[512];

void read() {
  scanf("%d", &N);
  N = 2 * N - 1;
  for(int i = 0; i < N; ++i) {
    scanf("%d", v + i);
  }
}

int mem[512][512];
int f(int li, int ls) {
  if(mem[li][ls] == -1) {
    if(v[li] != v[ls]) {
      mem[li][ls] = 0;
    } else if(li == ls) {
      mem[li][ls] = 1;
    } else {
      int fcolor = v[li];
      int s = 0;
      for(int i = li + 2; i <= ls; i += 2) {
        if(v[i] == fcolor) {
          s = (s + f(li + 1, i - 1)) % MOD;
        }
      }
      mem[li][ls] = s;
    }
  }
  return mem[li][ls];
}

void init() {
  for(int i = 0; i < N; ++i) {
    for(int j = 0; j < N; ++j) {
      mem[i][j] = -1;
    }
  }
}

int main(int argc, char *argv[]) {
  freopen("culori.in", "r", stdin);
  freopen("culori.out", "w", stdout);
  read();
  init();
  printf("%d\n", f(0, N - 1));
  return 0;
}