Cod sursa(job #2325384)

Utilizator mateibanuBanu Matei Costin mateibanu Data 22 ianuarie 2019 16:35:30
Problema Arbori Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;

#define ll long long

ll n,m,k,t=1,i,j,l,x;
ll a[100][100][100];
//nr de noduri - gradul radacinii mod m - nr de noduri al celui mai mare fiu al radacinii

ll com(ll x, ll y){
    if (y!=1) y=a[y][(k-1+m)%m][n];
    if (x){
        t*=(y+x-1);
        t/=x;
    }
    else t=1;
    return t;
}
int main()
{
    freopen("arbori.in","r",stdin);
    freopen("arbori.out","w",stdout);
    scanf("%lld%lld%lld",&n,&m,&k);
    for (i=0;i<=n;i++)
        a[1][0][i]=1;
    for (i=2;i<=n;i++){
        a[i][(i-1+m)%m][1]=1;
        for (j=0;j<m;j++)
            for (l=2;l<=n;l++)
                for (x=0;x*l<i;x++){
                    a[i][j][l]+=a[i-x*l][(j-x+10000*m)% m][l-1]*com(x,l);
                }
    }
    printf("%lld",a[n][k][n]);
    return 0;
}