Cod sursa(job #2828074)

Utilizator puica2018Puica Andrei puica2018 Data 6 ianuarie 2022 19:59:06
Problema Permutari2 Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;

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

const int mod=10007;

int n,k;
int fact[305];
long long dp[305][305];

/// dp[i][j] = cate permutari de ordin i p au s(p)=j
/// dp[i][j] = (dp[x][j-1]*dp[i-x][1],x=j-1...i-1)

/// 1 2   2
/// 2 1   1

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