Cod sursa(job #1340933)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 12 februarie 2015 10:27:35
Problema Permutari2 Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<bits/stdc++.h>
using namespace std;

ifstream fin("permutari2.in");
ofstream fout("permutari2.out");

const int MODULO=10007;
const int NMAX=305;

int n,k,dp[NMAX][NMAX],fact[NMAX];
//dp[i][j]=nr de perm de lg i folosind primele i elemente cu j prefixe bune

int main()
{
    int i,j,l;
    fin>>n>>k;
    fact[1]=1;
    for (i=2;i<NMAX;i++) fact[i]=(i*fact[i-1])%MODULO;
    dp[1][1]=1;
    for (i=2;i<=n;i++)
        {
            dp[i][1]=fact[i];
            for (j=2;j<=i;j++)
                {
                    for (l=1;l<i;l++)
                        dp[i][j]+=dp[l][j-1]*dp[i-l][1];
                    dp[i][j]%=MODULO;
                }
            for (j=2;j<=i;j++)
                {
                    dp[i][1]-=dp[i][j];
                    if (dp[i][1]<0) dp[i][1]+=MODULO;
                }
        }
    fout<<dp[n][k]<<"\n";
    return 0;
}