Pagini recente » Cod sursa (job #243218) | Cod sursa (job #2868274) | Cod sursa (job #385060) | Cod sursa (job #965677) | Cod sursa (job #1158908)
#include <cstdio>
using namespace std;
const int NMax = 310, KMax = 310, MOD = 10007;
int N, K;
int dp[NMax][KMax], fact[NMax];
long long t[NMax];
int main()
{
freopen("permutari2.in", "r", stdin);
scanf("%d %d", &N, &K);
fact[0] = 1;
for (register int i = 1; i <= N; ++ i)
fact[i] = fact[i-1] * i % MOD;
t[1] = 1;
// for (register int i = 2; i <= N; ++ i)
// {
// for (register int j = 1; j < i; ++ j)
// t[i] = (t[i] + t[j] * fact[i-j]) % MOD;
// t[i] = fact[i] - t[i];
// t[i] = t[i] < 0 ? t[i] + MOD : t[i];
// }
for (register int i = 1; i <= N; ++ i)
dp[i][i] = 1;
for (register int i = 2; i <= N; ++ i)
{
for (register int j = 1; j < i; ++ j)
{
t[i] += t[j] * fact[i - j];
if (j > K)
continue;
register long long sum = 0;
for (int k = j-1; k < i; ++ k)
sum += dp[k][j-1] * t[i - k];
dp[i][j] = sum % MOD;
}
t[i] %= MOD;
t[i] = fact[i] - t[i];
t[i] = t[i] < 0 ? t[i] + MOD : t[i];
dp[i][1] = t[i];
}
freopen("permutari2.out", "w", stdout);
printf("%d\n", dp[N][K]);
return 0;
}