Cod sursa(job #2246591)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 27 septembrie 2018 11:25:06
Problema Permutari2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;

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

namespace {
const int N = 305, MOD = 10007;

int fact[N], dp[N][N];

static void fix(int &x) {
	x = x >= MOD ? x - MOD : x;
	x = x < 0 ? x + MOD : x; } };

int main() {
	int n, k;
	fact[0] = 1;
	for (int i = 1; i < N; ++i)
		fact[i] = fact[i - 1] * i % MOD;

	for (int i = 2; i < N; ++i) {
		dp[1][i] = fact[i] - fact[i - 1];
		for (int j = 1; j < i; ++j) {
			dp[1][i] = dp[1][i] - dp[1][j] * fact[i - j] % MOD;
			fix(dp[1][i]); } }

	fi >> n >> k;
	dp[1][1] = 1;
	for (int t = 2; t <= k; ++t)
		for (int i = t; i <= n; ++i) {
			for (int j = t - 1; j <= i; ++j)
				dp[t][i] = (dp[t][i] + dp[t - 1][j] * dp[1][i - j]) % MOD; }

	fo << dp[k][n] << endl;

	return 0; }