Pagini recente » Cod sursa (job #767671) | Cod sursa (job #372924) | Cod sursa (job #2856837) | Cod sursa (job #2480838) | Cod sursa (job #3241525)
#include <fstream>
using namespace std;
ifstream f("gard2.in");
ofstream g("gard2.out");
const int NMAX=51,MAXC=91;
int N,K,D[NMAX][MAXC],aux[MAXC];
long long C[NMAX][NMAX];
void add(int A[],int B[]) {
int T=0;
if(A[0]<B[0]) {
A[0]=B[0];
}
for(int i=1; i<=A[0]; i++) {
T+=A[i]+B[i];
A[i]=T%10;
T/=10;
}
if(T>0) {
A[++A[0]]=1;
}
}
void genComb() {
C[0][0]=1;
for(int i=1; i<=N; i++) {
C[i][0]=C[i][i]=1;
for(int j=1; j<i; j++) {
C[i][j]=C[i-1][j]+C[i-1][j-1];
}
}
}
void afis(int A[]) {
for(int i=A[0]; i>=1; i--) {
g<<A[i];
}
}
void init(int A[]) {
for(int i=1; i<=A[0]; i++) {
A[i]=0;
}
A[0]=1;
}
void mul(int A[],long long B,int C[]) {
long long T=0;
C[0]=A[0];
for(int i=1; i<=C[0]; i++) {
T+=A[i]*B;
C[i]=T%10;
T/=10;
}
while(T>0) {
C[++C[0]]=T%10;
T/=10;
}
}
void calcul() {
D[0][0]=D[0][1]=1;
D[1][0]=D[1][1]=1;
for(int i=2; i<=N; i++) {
D[i][0]=1;
for(int x=1; x<=min(K,i); x++) {
init(aux);
mul(D[i-x],C[i][x],aux);
add(D[i],aux);
}
}
}
int main() {
f>>N>>K;
genComb();
calcul();
afis(D[N]);
f.close();
g.close();
return 0;
}