题目大意:原题链接:点击打开链接
题目分析:
错误分析:没有调用f函数;
指数型母函数:
#include<cstdio> #include<cstring> using namespace std; const int MAX=11; double fa[MAX],a[MAX],temp[MAX]; void f()//1!,2!,3!……阶乘 { fa[0]=1; for(int i=1;i<MAX;i++) fa[i]=i*fa[i-1]; } int main() { f(); int i,j,k,n,m,c[11]; while(scanf("%d%d",&n,&m)!=EOF) { memset(a,0,sizeof(a)); memset(temp,0,sizeof(temp)); for( i=0;i<n;i++) scanf("%d",&c[i]);5 for( i=0;i<=c[0];i++)//第一个表达式(1+X+x^2/2!+x^3/3!+……+x^c[0]/c[0]!)的系数赋值;即第一种物品的排列方式 a[i]=1.0/fa[i]; for( i=1;i<n;i++)//其余n-1个表达式(1+X+x^2/2!+x^3/3!+……+x^c[0]/c[i]!) { for( j=0;j<MAX;j++)//j控制表达式内有几个数,如第j个数的系数1/j!; for( k=0;k<=c[i]&&(k+j<MAX);k++)//k控制i个表达式的第j个数的指数 temp[j+k]+=a[j]/fa[k];然后把所有表达式展开, 指数相加,系数相乘; for( j=0;j<MAX;j++)//交换 { a[j]=temp[j]; temp[j]=0; } } printf("%.0lf\n",a[m]*fa[m]); } return 0; }