您的位置:首页 > 其它

HDU - 1521 排列组合 [指数型母函数]

2017-07-28 15:54 399 查看
题意:给你n个物品和他的数量,求从这些物品中取出m个物品的排列

题解:指数型母函数模板题

AC代码:

#include<stdio.h>
#include<string.h>
double f[15];
int main()
{
int i,j,k,n,m,num[15];
double c1[15],c2[15];
f[0]=f[1]=1;
for(i=2;i<=10;i++)
f[i]=f[i-1]*i;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%d",&num[i]);
for(i=0;i<=10;i++)
c1[i]=c2[i]=0.0;
for(i=0;i<=num[1];i++)
c1[i]=1.0/f[i];
for(i=2;i<=n;i++)
{
for(j=0;j<=m;j++)
{
for(k=0;k<=num[i]&&j+k<=m;k++)
{
c2[j+k]=c2[j+k]+c1[j]/f[k];
}
}
for(j=0;j<=m;j++)
{
c1[j]=c2[j];
c2[j]=0;
}
}
printf("%.0lf\n",c1[m]*f[m]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: