Pagini recente » Cod sursa (job #1420964) | Cod sursa (job #1719198) | Cod sursa (job #1174550) | Cod sursa (job #1728866) | Cod sursa (job #158145)
Cod sursa(job #158145)
#include <stdio.h>
#include <string.h>
using namespace std;
#define llong long long
#define MAXN 92
#define MAXK 11
int N, M, K;
llong A[MAXN][MAXK][MAXN];
llong comb(llong n, int k)
{
llong i; llong ret = 1;
for(i = 1; i <= (llong)k; i++) ret *= n-k+i, ret /= i;
return ret;
}
llong baga(int n, int k, int p)
{
if(n == 1 && k == 0) return 1;
if(p > n-1) return 0;
if(A[n][k][p] != -1) return A[n][k][p];
int i; llong ret = 0;
for(i = 0; i*p < n; i++)
{
if(p == 1)
ret += baga(n-i*p, (k-i%M+M)%M, p+1);
else
ret += baga(n-i*p, (k-i%M+M)%M, p+1) *
comb( baga(p, (K-1+M)%M, 1)+i-1, i);
}
return A[n][k][p] = ret;
}
int main(void)
{
freopen("arbori.in", "rt", stdin);
freopen("arbori.out", "wt", stdout);
scanf("%d %d %d\n", &N, &M, &K);
memset(A, -1, sizeof(A));
printf("%lld\n", baga(N, K, 1));
return 0;
}