Pagini recente » Cod sursa (job #148818) | Cod sursa (job #2965079) | Cod sursa (job #1504698) | Cod sursa (job #3257302) | Cod sursa (job #137792)
Cod sursa(job #137792)
#include <stdio.h>
#define LL long long
int N, M, K;
LL din[41][41][41];
LL bun[41];
int main()
{
int i, j, k, q;
LL rez = 0;
freopen("arbori.in", "r", stdin);
freopen("arbori.out", "w", stdout);
scanf("%d %d %d", &N, &M, &K);
int vbun = K - 1;
if (vbun < 0) vbun += M;
bun[1] = 1;
for (i = 0; i <= N; i++) din[1][0][i] = 1;
LL nrpos;
for (i = 2; i <= N; i++) {
for (j = 1; j <= i - 1; j++) {
for (k = 1; k <= N; k++) {
din[i][j][k] = din[i][j][k - 1];
nrpos = 1;
for (q = 1; q <= j && q * k <= i; q++) {
nrpos = nrpos * (bun[k] + q - 1) / q;
din[i][j][k] += din[i - q * k][j - q][k-1] * nrpos;
}
}
if (j % M == vbun) bun[i] += din[i][j][N];
if (i == N && j % M == K) rez += din[i][j][N];
}
}
printf("%lld\n", rez);
return 0;
}