Cod sursa(job #787518)

Utilizator danalex97Dan H Alexandru danalex97 Data 13 septembrie 2012 16:12:02
Problema Arbori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <fstream>
using namespace std;

const int Nmax = 95;
const int Kmax = 15;

long long D[Nmax][Kmax][Nmax];
int N,M,K;

ifstream F("arbori.in");
ofstream G("arbori.out");

inline int Mod (int A) 
{
    A = (A >= M || -A >= -M) ? A - M : A; 
	A = (A >= M || -A >= -M) ? A % M : A;
    return ( A<0 ) ? A + M : A;
}

int main()
{
	F>>N>>M>>K;
	for (int i=0;i<=N;++i)
		D[1][0][i]=1;
	for (int i=2;i<=N;++i)
	{
		D[i][ Mod(i-1) ][1]=1;
		for (int k=2;k<=N;++k)
			for (int j=0;j < M;++j)
			{
				long long Sol=1;
				for (int l=0;l*k < i;++l)
				{
					D[i][j][k] += Sol * D[i-l*k][Mod(j-l)][k-1];
					Sol *= D[k][Mod(K - 1)][k - 1] + l;
					Sol /= l + 1;
				}					
			}
	}
	G<<D[N][K][N-1]<<'\n';
}