Cod sursa(job #1283006)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 4 decembrie 2014 22:58:57
Problema Permutari2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#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;
}