Cod sursa(job #514438)

Utilizator LgregL Greg Lgreg Data 18 decembrie 2010 18:28:38
Problema Permutari2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
#define MOD 10007
int N,M,fact[400],p[400],best[400][400];
int main()
{
freopen("permutari2.in","r",stdin);
freopen("permutari2.out","w",stdout);
    scanf("%d%d",&N,&M);

            fact[0]=1;
        for(int i=1;i<=N;++i)
            fact[i]=fact[i-1]*i%MOD;

        p[1]=1;
        p[2]=1;
        for(int i=3;i<=N;++i)
        {
            p[i]=fact[i];
            for(int j=0;j<i;++j)
            {
                p[i]=p[i]-p[j]*fact[i-j]%MOD;
                if(p[i]<0)
                    p[i]+=MOD;
            }
        }
        best[0][0]=1;
        for(int i=0;i<N;++i)
            for(int j=0;j<M;++j)
            {
                if(best[i][j])
                for(int k=i+1;k<=N;++k)
                {
                    best[k][j+1]=(best[k][j+1]+best[i][j]*p[k-i])%MOD;
                }
            }
    printf("%d\n",best[N][M]);

}