1. 程式人生 > >hdu 1521 排列組合 —— 指數型生成函數

hdu 1521 排列組合 —— 指數型生成函數

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 排列組合 —— 指數型生成函數