Cod sursa(job #2828069)

Utilizator puica2018Puica Andrei puica2018 Data 6 ianuarie 2022 19:55:29
Problema Permutari2 Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 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],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[i][j]+dp[x][j-1]*dp[i-x][1])%mod;
            dp[i][1]=(dp[i][1]-dp[i][j]+mod)%mod;
        }
    }
    fout<<dp[n][k]<<"\n";
    return 0;
}