Pagini recente » Cod sursa (job #351613) | Cod sursa (job #162322) | Cod sursa (job #1886470) | Cod sursa (job #1336142) | Cod sursa (job #178826)
Cod sursa(job #178826)
#include<stdio.h>
long long A[100][12][100];
int N,M,K;
long long Nr(int k, int x){
long long num = A[k][(K+M-1)%M][N] + x - 1;
long long rez = 1;
long long crt = 2;
for(long long i = num - x + 1; i<= num; i++){
if(i<0) for(;;);
rez *= i;
while(crt <= x && rez%crt==0){
rez/=crt;
crt++;
}
}
/*
if(!rez)
return 1;
*/
return rez;
}
int main(){
FILE *fin = fopen("arbori.in","r"),
*fout = fopen("arbori.out","w");
fscanf(fin,"%d%d%d",&N,&M,&K);
for(int k=0;k<=N;k++)
A[1][0][k] = 1;
for(int i=2;i<=N;i++)
for(int j=0;j<M;j++)
for(int k=1;k<=N;k++){
if(i==5 && j==1){
int q = j;
q+=i;
}
for(int x = 0; x <= i/k; x++){
int ii,jj,kk;
ii = i-x*k;
jj = (j+M*x-x)%M;
kk = k-1;
A[i][j][k] += A[ii][jj][kk] * Nr(k,x);
}
}
/*
for(int i=2;i<=N;i++)
for(int j=0;j<M;j++){
for(int k=1;k<=N;k++)
fprintf(fout,"%lld ",A[i][j][k]);
fprintf(fout,"\n");
}
*/
fprintf(fout,"%lld\n",A[N][K][N]);
fclose(fin);
fclose(fout);
return 0;
}