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;
}
题解:指数型母函数模板题
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;
}
相关文章推荐
- HDU 1521 排列组合(指数型母函数)
- HDU 1521 排列组合 指数型母函数
- hdu 1521 排列组合 指数型母函数
- 排列组合(HDU_1521) 指数型母函数
- hdu1521 排列组合(指数型母函数)
- HDU 1521 排列组合 (指数型母函数)
- HDU 1521 排列组合(指数型母函数)
- hdu1521 排列组合 指数型母函数
- [HDU 1521] 排列组合 指数型母函数
- HDU 1521 排列组合 (指数型母函数)
- HDU-1521 排列组合 (指数型母函数)
- HDU - 1521 排列组合 (指数型母函数)
- 指数型母函数:hdu 1521 排列组合
- HDU 1521 排列组合 指数型母函数
- 【hdu 1521】【标准的指数型母函数】排列组合【求多重集的排列数】
- hdu 1521 排列组合 指数型母函数
- [ACM] hdu 1521 排列组合(指数型母函数)
- HDU 1521 排列组合(指数型母函数)
- hdu-1521-排列组合(指数型母函数)
- hdu 1521 排列组合(指数型母函数)