Pagini recente » Cod sursa (job #1896483) | Cod sursa (job #625440) | Cod sursa (job #3130412) | Cod sursa (job #360906) | Cod sursa (job #1158895)
#include <fstream>
using namespace std;
const int NMax = 310, KMax = 310, MOD = 10007;
int N, K;
int v[NMax], dp[NMax][KMax], fact[NMax];
long long t[NMax];
void Read()
{
ifstream f("permutari2.in");
f >> N >> K;
f.close();
}
void Solve()
{
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 = 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];
}
ofstream g("permutari2.out");
g << dp[N][K] << "\n";
g.close();
}
int main()
{
Read();
Solve();
return 0;
}