Cod sursa(job #2413098)

Utilizator lucametehauDart Monkey lucametehau Data 22 aprilie 2019 21:31:06
Problema Permutari2 Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>

using namespace std;

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

const int MOD = 1e4 + 7;

int n, k;

short dp[305][305], f[305];

int main() {
  cin >> n >> k;
  dp[1][1] = f[1] = 1;
  for(int i = 2; i <= n; i++)
    dp[i][1] = f[i] = f[i - 1] * i % MOD;
  for(int i = 2; i <= n; i++) {
    for(int j = 1; j < i; j++) {
      dp[i][1] -= f[i - j] * dp[j][1] % MOD;
      if(dp[i][1] < 0)
        dp[i][1] += MOD;
    }
  }
  for(int i = 2; i <= n; i++) {
    for(int j = 1; j < i; j++) {
      for(int l = 2; l <= i; l++) {
        dp[i][l] += dp[j][l - 1] * dp[i - j][1] % MOD;
        if(dp[i][l] > MOD)
          dp[i][l] -= MOD;
      }
    }
  }
  cout << dp[n][k];
  return 0;
}