Cod sursa(job #2538890)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 5 februarie 2020 12:11:41
Problema Arbori Scor 60
Compilator cpp-64 Status done
Runda simulare_miri Marime 0.88 kb
#include <fstream>

using namespace std;
int N,M,K,i,j,k,x;
long long d[100][12][100];
long long comb(long long n, long long k)
{
    int i;
	long long rez=1;
    for(i=1; i<=k; ++i)
    {
		rez*=n-k+i;
	    rez/=i;
	}
    return rez;
}
long long Nr(long long kk, long long x)
{
    if(kk==1)
        return 1;
    long long n=d[kk][(K+M-1)%M][N]+x-1,k=x;
    long long nr=2,rez=1,i;
    for(int i=n-k+1;i<=n;++i)
    {
        rez*=i;
        while(nr<=k&&rez%nr==0)
		{
            rez/=nr;
            nr++;
        }
    }
    return rez;
}
int main()
{
    ifstream f("arbori.in");
    ofstream g("arbori.out");
    f>>N>>M>>K;
	for(i=0; i<=N; i++) d[1][0][i]=1;
	for (i=2; i<=N; i++)
		 for(j=0; j<M; j++)
			  for(k=1; k<=N; k++)
				   for(x=0; x<=i/k; x++)
					    d[i][j][k]+=d[i-x*k][(j-x+M*x)%M][k-1]*Nr(k,x);
	g<<d[N][K][N];
	return 0;
}