Pagini recente » Cod sursa (job #2628736) | Cod sursa (job #904020) | Cod sursa (job #863849) | Cod sursa (job #2199524) | Cod sursa (job #1158857)
#include <iostream>
#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 (int i = 1; i <= N; ++ i)
fact[i] = fact[i-1] * i % MOD;
t[1] = 1;
for (int i = 2; i <= N; ++ i)
{
for (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 (int i = 1; i <= N; ++ i)
dp[i][1] = t[i], dp[i][i] = 1;
for (int i = 2; i <= N; ++ i)
for (int j = 2, lim = min(i-1, K); j <= lim; ++ j)
for (int k = 1; k < i; ++ k)
dp[i][j] = (dp[i][j] + dp[k][j-1] * t[i - k]) % MOD;
ofstream g("permutari2.out");
g << dp[N][K] << "\n";
g.close();
}
int main()
{
Read();
Solve();
return 0;
}