注意点
指数母函数和普通母函数差别不是仅仅是每一项*1.0/fac[n]
- c1[]c2[]要改为double型
- 输出格式为printf(" %.0lf\n ", fac[m]*c1[m]);
AC代码
#include <bits/stdc++.h>
using namespace std;
int fac[12];
void initfac(){
fac[0] = 1;
for(int i = 1; i<12; i++){
fac[i] = fac[i-1]*i;
}
}
int main(int argc, char const *argv[])
{
initfac();
int n, m, tmp;
while((scanf("%d%d", &n, &m)) != EOF){
double c1[105] = {0}, c2[105] = {0};
for(int i = 0; i < n; i++){
scanf("%d", &tmp);
if(i == 0){
for(int j = 0; j <=tmp; j++){
c1[j] = 1.0/fac[j];
}
}else{
for(int j = 0; j<=tmp; j++){
for(int k = 0; k+j<=m; k++){
c2[k+j] += c1[k]*1.0/fac[j];
}
}
for(int k = 0; k<=m; k++){
c1[k] = c2[k],c2[k] = 0;
}
}
}
printf("%.0lf\n", fac[m]*c1[m]);
}
return 0;
}