Pagini recente » Cod sursa (job #766801) | Cod sursa (job #1547152) | Cod sursa (job #407877) | Cod sursa (job #2499772) | Cod sursa (job #2108561)
#include <fstream>
#include <math.h>
using namespace std;
ifstream cin("q.in");
ofstream cout("q.out");
const int nmax=200,cifmax=200;
struct huge
{
short int l=0,v[cifmax+5];
};
huge dp[nmax+5][nmax+5];
huge a;
int n,k;
void give(int i,int j,huge *a)
{
huge aux;
aux.l=dp[i][j].l;
for(int l=1;l<=dp[i][j].l;l++)
aux.v[l]=dp[i][j].v[l];
*a=aux;
}
void aduna(huge a,huge b,huge *c)
{
huge x,y,z;
int val=max(x.l,y.l),rest=0;
z.l=val;
for(int i=1;i<=val;i++)
{
z.v[i]=(x.v[i]+y.v[i]+rest)%10;
rest=(x.v[i]+y.v[i]+rest)/10;
}
if(rest)
{
z.l++;
z.v[z.l]=1;
}
*c=z;
}
void prod(huge a,int val,huge *b)
{
huge aux,c=*a;
aux.l=0;
for(int i=1;i<=val;i++)
aduna(&c,&aux,&aux);
*b=aux;
}
void afisare(int i,int j)
{
for(int l=1;l<=dp[i][j].l;l++)
cout<<dp[i][j].v[l];
}
int main()
{
cin>>n>>k;
dp[1][1].l=1;
dp[1][1].v[1]=1;
for(int i=2;i<=n;i++)
{
for(int j=1;j<=k;j++)
{
aduna(dp[i][j],dp[i-1][j-1],&dp[i][j]);
prod(&dp[i][j],i-1,&a);
aduna(dp[i][j],a,&dp[i][j]);
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
afisare(i,j);
cout<<"\n";
}
}
for(int i=1;i<=dp[n][k].l;i++)
cout<<dp[n][k].v[i];
return 0;
}
/**
**/