指数型母函数,多重排列数。
#include
#include
#include
#define max 300
double c1[max],c2[max];
int val[20];
double factorial(int m)
{
double i=1;
int j;
for(j=1;j<=m;j++)
i*=j;
return i;
}
int main()
{
int m,n,i,j,k;
while((scanf("%d%d",&n,&m))!=EOF)
{
for( i=0;i<=n-1;i++)
{
scanf("%d",&val[i]);
}
memset(c1,0,sizeof(c1));
memset(c2,0,sizeof(c2));
for( j=0;j<=val[0];j++)//记录第一项
{
c1[j]=1.0/factorial(j);
}
for(i=1;i<=n-1;i++)//指数型模函数运算
{
for(j=0;j<=m;j++)
{
for(k=0;k+j<=m&&k<=val[i];k++)
{
c2[k+j]+=c1[j]/factorial(k);
}
}
for(j=0;j<=m;j++)//第一项不断变化
{
c1[j]=c2[j];
c2[j]=0;
}
}
printf("%0.0f\n",c1[m]*factorial(m));
}
return 0;
}