Cod sursa(job #2125335)

Utilizator TESTHARD123TEST CENTRE TESTHARD123 Data 8 februarie 2018 13:12:02
Problema Arbori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
# include <bits/stdc++.h>
using namespace std;
int N, M, K;
long long dp[101][21][101];
 //Ionitas code 
inline int mod (int A) {
    if (A >= M || -A >= -M) A -= M;
    if (A >= M || -A >= -M) A %= M;
    if (A <  0) A += M;
    return A;
}
 
int main() {
	ifstream fin("arbori.in");ofstream fout("arbori.out"); 
	ios_base::sync_with_stdio(0);
	fin.tie(0);
	fin>>N>>M>>K;
    for (int i = 0; i <= N; ++i)
        dp[1][0][i] = 1;
    for (int i = 2; i <= N; ++i) {
        dp[i][mod (i - 1)][1] = 1;
        for (int k = 2; k <= N; ++k)
            for (int j = 0; j < M; ++j) {
                long long sol = 1;
                for (int l = 0; l * k < i; ++l) {
                    dp[i][j][k] += sol * dp[i - l * k][mod (j - l)][k - 1];
                    sol *= dp[k][mod (K - 1)][k - 1] + l, sol /= l + 1;
                }
            }
    }
    fout<<dp[N][K][N - 1];
    return 0;
}