Cod sursa(job #2246468)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 27 septembrie 2018 09:42:44
Problema Permutari2 Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<bits/stdc++.h>
#define maxN 305
using namespace std;

long long fact[maxN],n,k;
long long dp[maxN][maxN];
const long long mod=10007LL;
int main()
{
    freopen("permutari2.in","r",stdin);
    freopen("permutari2.out","w",stdout);

    scanf("%lld%lld",&n,&k);

    fact[0]=1LL;
    for(int i=1;i<=n;i++)
        fact[i]=(fact[i-1]*(1LL*i))%mod;


    for(int i=1;i<=n;i++)
    {
        dp[i][1]=fact[i];
        for(int j=i-1;j>=1;j--)
        {
            dp[i][1]+=mod*mod;
            dp[i][1]=(dp[i][1]-dp[j][1]*fact[i-j])%mod;
        }

        while(dp[i][1]<0) dp[i][1]+=mod;
        dp[i][1]%=mod;



    }

    for(int i=1;i<=n;i++)
    {
        for(int j=2;j<=min(k,1LL*i);j++)
            for(int t=1;(i-t)>=(j-1);t++)
                dp[i][j]=(dp[i][j]+dp[i-t][j-1]*dp[t][1])%mod;
    }

    printf("%lld\n",dp[n][k]);

    return 0;
}