Cod sursa(job #135349)

Utilizator astronomyAirinei Adrian astronomy Data 13 februarie 2008 17:25:09
Problema Arbori Scor Ascuns
Compilator cpp Status done
Runda Marime 0.77 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++)
        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(j = 0; j <= N; j++) A[1][0][j] = 1;

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

    return 0;
}