hdu 1521 排列组合 —— 指数型生成函数
Posted zinn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 1521 排列组合 —— 指数型生成函数相关的知识,希望对你有一定的参考价值。
题目: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 ",f[m]*jc[m]); } return 0; }
以上是关于hdu 1521 排列组合 —— 指数型生成函数的主要内容,如果未能解决你的问题,请参考以下文章