Cod sursa(job #1151814)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 24 martie 2014 13:09:05
Problema Permutari2 Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#define MOD 10007
#define Nmax 305

using namespace std;

int dp[Nmax][Nmax],t[Nmax],N,K,f[Nmax];

inline int Modulo(int x)
{
    while(x>=MOD)
        x-=MOD;
    return x;
}

int main()
{
    int i,j,k;
    freopen ("permutari2.in","r",stdin);
    freopen ("permutari2.out","w",stdout);
    scanf("%d%d", &N,&K);
    f[0]=1;
    for(i=1;i<=N;++i)
        f[i]=Modulo(f[i-1]*i);
    for(i=1;i<=N;++i)
    {
        t[i]=f[i];
        for(j=1;j<i;++j)
        {
            t[i]-=Modulo(t[j]*f[i-j]);
            if(t[i]<0)
                t[i]+=MOD;
        }
    }
    for(i=1;i<=N;++i)
        dp[i][1]=t[i];
    for(i=1;i<=N;++i)
        for(j=2;j<=i;++j)
            for(k=j-1;k<i;++k)
                dp[i][j]=Modulo(dp[i][j]+dp[k][j-1]*dp[i-k][1]);
    printf("%d\n", dp[N][K]);
    return 0;
}