Pagini recente » Cod sursa (job #1045967) | Cod sursa (job #2160892) | Cod sursa (job #2903933) | Cod sursa (job #3270089) | Cod sursa (job #2828074)
#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];
long long 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[x][j-1]*dp[i-x][1];
dp[i][j]%=mod;
dp[i][1]-=dp[i][j];
}
dp[i][1]%=mod;
if(dp[i][1]<0)
dp[i][1]+=mod;
}
fout<<dp[n][k]<<"\n";
return 0;
}