HDU - 1521 排列组合 (指数型母函数)
2017-08-13 08:35
225 查看
题目描述:
点击打开链接
点击打开链接
这题是之前母函数题的延续,在组合问题的基础加上排列这个时候我们可以使用指数型母函数。同样只讲一下指数型母函数的结论。
假设现在有n种物品,其中a1物品重复的p1次,a2重复了p2次,an重复了pn次,现在我们需要取m件物品进行排列。那么可以写出如下形式的表达式。
(1+x^1/1!+x^2/2!+..x^p1/p1!)(1+x^1/1!+x^2/2!+...x^p2/p2!)...(1+x^1/1!+x^2/2!+...x^pn/pn!).乘积结果中x^m的系数乘上m!就是我们要求的答案。
这个题就可以直接套用这个结论了。
AC代码:
#include<iostream> #include<cmath> #include<cstdio> #include<cstring> #include<string> #include<stack> #include<queue> #include<vector> #include<algorithm> using namespace std; int n,m; int fact[12]; int a[12]; double c1[12]; double c2[12]; void init() { fact[0]=1; fact[1]=1; for (int i=2;i<=10;i++) fact[i]=i*fact[i-1]; } int main() { init(); while(scanf("%d%d",&n,&m)!=EOF) { for (int i=0;i<12;i++) c1[i]=0,c2[i]=0; for (int i=1;i<=n;i++) scanf("%d",&a[i]); for (int i=0;i<=a[1];i++) c1[i]=1.0/fact[i]; for (int i=2;i<=n;i++) { for (int j=0;j<=m;j++) for (int k=0;k<=m&&k<=a[i];k++) c2[k+j]+=c1[j]/fact[k]; for (int j=0;j<=m;j++) { c1[j]=c2[j]; c2[j]=0; } } printf("%.0lf\n",fact[m]*c1[m]); } return 0; }
相关文章推荐
- hdu 1521 排列组合 指数型母函数
- [HDU 1521] 排列组合 指数型母函数
- hdu1521 排列组合(指数型母函数)
- [ACM] hdu 1521 排列组合(指数型母函数)
- 指数型母函数:hdu 1521 排列组合
- hdu 1521 排列组合 指数型母函数
- [ACM] hdu 1521 排列组合(指数型母函数)
- hdu-1521-排列组合(指数型母函数)
- hdu 1521 排列组合(指数型母函数)
- HDU-1521 排列组合 (指数型母函数)
- [ACM] hdu 1521 排列组合(指数型母函数)
- HDU 1521 排列组合(指数型母函数)
- HDU 1521 排列组合(指数型母函数)
- HDU 1521 排列组合 指数型母函数
- 排列组合(HDU_1521) 指数型母函数
- HDU 1521 排列组合 (指数型母函数)
- HDU1521 排列组合【指数型母函数】
- hdu1521 排列组合 指数型母函数
- HDU 1521 排列组合 (指数型母函数)
- HDU 1521 排列组合 指数型母函数