Pagini recente » Cod sursa (job #1073249) | Cod sursa (job #245325) | Cod sursa (job #586746) | Cod sursa (job #1750496) | Cod sursa (job #1158872)
#include <fstream>
using namespace std;
const int NMax = 310, KMax = 310, MOD = 10007;
int N, K;
int v[NMax], dp[NMax][KMax], fact[NMax], 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][1] = t[i], dp[i][i] = 1;
for (register int i = 2; i <= N; ++ i)
for (register int j = 2, lim = min(i-1, K); j <= lim; ++ j)
{
register int sum = 0;
for (int k = 1; k < i; ++ k)
sum += dp[k][j-1] * t[i - k] % MOD, sum = sum >= MOD ? sum - MOD : sum;
dp[i][j] = sum;
}
ofstream g("permutari2.out");
g << dp[N][K] << "\n";
g.close();
}
int main()
{
Read();
Solve();
return 0;
}