Pagini recente » Cod sursa (job #2666514) | Monitorul de evaluare | Cod sursa (job #423941) | Cod sursa (job #1718966) | Cod sursa (job #1283006)
#include <cstdio>
#define MOD 10007
#define Nmax 305
using namespace std;
int fact[Nmax],dp[Nmax][Nmax],n,k;
int main()
{
int i,j,p;
freopen ("permutari2.in","r",stdin);
freopen ("permutari2.out","w",stdout);
scanf("%d%d", &n,&k);
fact[0]=1;
for(i=1;i<=n;++i) fact[i]=(fact[i-1]*i)%MOD;
dp[1][1]=dp[2][1]=1;
for(i=3;i<=n;++i)
{
for(j=1;j<i;++j)
dp[i][1]=(dp[i][1]+fact[j]*dp[i-j][1])%MOD;
dp[i][1]=fact[i]-dp[i][1];
if(dp[i][1]<0) dp[i][1]+=MOD;
}
for(i=1;i<=n;++i)
for(j=2;j<=k;++j)
for(p=i-1;p>=j-1;--p)
dp[i][j]=(dp[i][j]+dp[p][j-1]*dp[i-p][1])%MOD;
printf("%d\n", dp[n][k]);
return 0;
}