Cod sursa(job #135358)

Utilizator astronomyAirinei Adrian astronomy Data 13 februarie 2008 17:44:13
Problema Arbori Scor Ascuns
Compilator cpp Status done
Runda Marime 0.85 kb
#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 baga(int n, int k, int p)
{
    if(A[n][k][p] != -1) return A[n][k][p];
    int t;
    for(A[n][k][p] = 0, t = p; t < n; t++)
    {
        if(t == 1) A[n][k][p] += baga(n-t, (k-1+M)%M, t);
        else A[n][k][p] += baga(t, (K-1+M)%M, 1) * baga(n-t, (k-1+M)%M, t);
    }
    return A[n][k][p];
}

int main(void)
{
    freopen("arbori.in", "rt", stdin);
    freopen("arbori.out", "wt", stdout);

    scanf("%d %d %d\n", &N, &M, &K);

    int i, j;
    
    memset(A, -1, sizeof(A));
    
    for(i = 0; i < M; i++) for(j = 0; j <= N; j++) A[1][i][j] = 0;
    for(i = 0; i <= N; i++) A[1][0][i] = 1;

    printf("%lld\n", baga(N, K, 1));

    return 0;
}