Cod sursa(job #1837603)

Utilizator lflorin29Florin Laiu lflorin29 Data 29 decembrie 2016 23:58:58
Problema Permutari2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("permutari2.in");
ofstream out("permutari2.out");

const int N = 300;
const int Mod = 10007;

int n, k;
int dp[N + 1][N + 1];

int main() {
  dp[0][0] = 1;
  in >> n >> k;

  for (int i = 1, Fact = 1; i <= n; ++i) {
    Fact = (Fact * i) % Mod;
    dp[i][1] = Fact;

    for (int j = 2; j <= n; ++j) {
      for (int last = j - 1; last < i; ++last) {
        dp[i][j] = (dp[i][j] + dp[last][j - 1] * dp[i - last][1]) % Mod;
      }

      dp[i][1] -= dp[i][j];

      if (dp[i][1] < 0) {
        dp[i][1] += Mod;
      }
      else if (dp[i][1] >= Mod)
        dp[i][1] -= Mod;
    }
  }

  out << dp[n][k];
  return 0;
}