Pagini recente » Cod sursa (job #1622814) | Cod sursa (job #1424376) | Cod sursa (job #773346) | Cod sursa (job #1413856) | Cod sursa (job #2828069)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("permutari2.in");
ofstream fout("permutari2.out");
const int mod=10007;
int n,k;
int fact[305],dp[305][305];
/// dp[i][j] = cate permutari de ordin i p au s(p)=j
/// dp[i][j] = (dp[x][j-1]*dp[i-x][1],x=j-1...i-1)
/// 1 2 2
/// 2 1 1
int main()
{
fin>>n>>k;
dp[1][1]=dp[2][1]=dp[2][2]=1;
fact[1]=1;
for(int i=2; i<=n; i++)
fact[i]=i*fact[i-1]%mod;
for(int i=3; i<=n; i++)
{
dp[i][1]=(fact[i]-1+mod)%mod;
dp[i][i]=1;
for(int j=2; j<i; j++)
{
for(int x=j-1; x<i; x++)
dp[i][j]=(dp[i][j]+dp[x][j-1]*dp[i-x][1])%mod;
dp[i][1]=(dp[i][1]-dp[i][j]+mod)%mod;
}
}
fout<<dp[n][k]<<"\n";
return 0;
}