Cod sursa(job #911931)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 11 martie 2013 22:48:33
Problema Permutari2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>

using namespace std;

const int MAX_N = 305;
const int Mod = 10007;

int N, K, DP[MAX_N][MAX_N], F[MAX_N];

void Solve() {
    F[0] = 1;
    for (int i = 1; i <= N; ++i)
        F[i] = (i * F[i - 1]) % Mod;
    DP[1][1] = 1;
    for (int n = 2; n <= N; ++n) {
        int SumDP = 0;
        for (int k = 2; k <= n; ++k) {
            for (int p = k - 1; p < n; ++p)
                DP[n][k] = (DP[n][k] + DP[p][k - 1] * DP[n - p][1]) % Mod;
            SumDP += DP[n][k];
        }
        DP[n][1] = (F[n] - SumDP % Mod + Mod) % Mod;
    }
}

void Read() {
    ifstream in("permutari2.in");
    in >> N >> K;
    in.close();
}

void Print() {
    ofstream out("permutari2.out");
    out << DP[N][K] << "\n";
    out.close();
}

int main() {
    Read();
    Solve();
    Print();
    return 0;
}