母函数详解:母函数与排列组合
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
double p[20],temp[20];
double jc[15];
int num[20];
int main()
{
int n,m;
jc[0]=1;
for(int i=1;i<12;i++)
jc[i]=jc[i-1]*i;
while(cin>>n>>m){
for(int i=1;i<=n;i++)
cin>>num[i];
memset(p,0,sizeof(p));
for(int i=0;i<=num[1];i++)
p[i]=1.0/jc[i];
for(int i=2;i<=n;i++){
memset(temp,0,sizeof(temp));
for(int j=0;j<=m;j++){
for(int t=0;t<=num[i];t++){
temp[j+t]+=p[j]*(1.0/jc[t]);
}
}
for(int j=0;j<=m;j++)p[j]=temp[j];
}
printf("%.0lf\n",p[m]*jc[m]);
}
return 0;
}