您的位置:首页 > 其它

hdu1521 指数型母函数 求解多重集排列数

2016-02-25 16:27 260 查看
  题意是给你n个物品, 每个物品有ai个, 从中选取m个物品的排列数是多少??这个问题可以使用指数型母函数来解决。。代码如下:

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
int f[15];
void initf()
{
f[0] = 1;
for(int i=1; i<=11; i++) f[i] = i*f[i-1];
}
int n, m;   //n个物品选出m件
int a[20];  //每件物品的数量
double c1[20], c2[20];

int main()
{
initf();
while(cin>>n>>m)
{
for(int i=1; i<=n; i++) cin>>a[i];
memset(c2, 0, sizeof(c2));
memset(c1, 0, sizeof(c1));
for(int i=0; i<=a[1]; i++) c1[i]=1.0/f[i];
for(int i=2; i<=n; i++)
{
for(int j=0; j<=10; j++)
for(int k=0; k<=a[i]; k++) if(j+k<=10)
c2[j+k] += c1[j]/f[k];
for(int j=0; j<=10; j++) c1[j]=c2[j], c2[j]=0;
}
//cout<<(int)c1[m]*f[m]<<endl;
printf("%.0f\n", c1[m]*(double)f[m]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: