hdu 1521 排列組合 —— 指數型生成函數
阿新 • • 發佈:2018-12-03
turn col color 函數 font 強制轉換 print size using
題目: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; }
hdu 1521 排列組合 —— 指數型生成函數