题目:http://acm.hdu.edu.cn/showproblem.php?pid=1521
标准的指数型生成函数;
WA了好几遍,原来是多组数据啊囧;
注意精度,直接强制转换(int)是舍去小数,会WA,+0.5再强制转换或输出 %.0lf 是四舍五入,能A。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef double db; int const xn=15; int n,m,jc[xn],s[xn]; db f[xn],g[xn]; void init() { jc[0]=1; for(int i=1;i<=10;i++)jc[i]=jc[i-1]*i; } int main() { init(); while(~scanf("%d%d",&n,&m)) { for(int i=0;i<=m;i++)f[i]=g[i]=0;// for(int i=1;i<=n;i++)scanf("%d",&s[i]); for(int i=0;i<=s[1];i++)f[i]=1.0/jc[i]; for(int i=2;i<=n;i++) { for(int j=0;j<=m;j++) for(int k=0;k<=s[i]&&j+k<=m;k++) g[j+k]+=f[j]/jc[k]; for(int j=0;j<=m;j++)f[j]=g[j],g[j]=0; } printf("%.0lf\n",f[m]*jc[m]); } return 0; }
原文地址:https://www.cnblogs.com/Zinn/p/10055924.html
时间: 2024-10-15 19:43:14