HDU1521——排列组合(指数型母函数)
2016-07-25 19:53
525 查看
题目链接:
最近一直在做组合数学的东西,也转载了部分大牛的博客,这道题若有不是很理解的地方,也可看我最近转载的有关母函数的博客。这道题是一道标准的指数型母函数裸题,直接套用母函数的公式即可,详见我转载的这篇博客,代码比较好懂,就是在基础母函数代码的基础上做了一点改动,在计算C2的时候,C1要除以对应的阶乘,最后结果乘以对应阶乘即可,代码如下:
最近一直在做组合数学的东西,也转载了部分大牛的博客,这道题若有不是很理解的地方,也可看我最近转载的有关母函数的博客。这道题是一道标准的指数型母函数裸题,直接套用母函数的公式即可,详见我转载的这篇博客,代码比较好懂,就是在基础母函数代码的基础上做了一点改动,在计算C2的时候,C1要除以对应的阶乘,最后结果乘以对应阶乘即可,代码如下:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; double a[15]={0}; double c1[105]={0}; double c2[105]={0}; double F(double n) { double sum=1.0; for(double i=1.0;i<=n;i++) sum*=i; return sum; } int main() { //freopen("input.in","r",stdin); int n, m; while(scanf("%d%d",&n,&m)!=EOF) { int t; for(int i=1;i<=n;i++) scanf("%lf",&a[i]); for(t=1;t<=n;t++) { if(a[t]!=0) { for(int i=0;i<=a[t];i++) c1[i]=1.0/F(i); break; } } for(int i=t+1;i<=n;i++) { for(int j=0;j<=100;j++) for(int k=0;k<=a[i];k++) c2[k+j]+=(c1[j]/F(k)); for(int j=0;j<=100;j++) { c1[j]=c2[j]; c2[j]=0; } } printf("%.0lf\n",c1[m]*F(m)); memset(a,0,sizeof(a)); memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); } return 0; }
相关文章推荐
- ACM常用算法
- 母函数 多项式相乘求系数(HDU 1028)
- 母函数简单应用_hdu_2189
- 母函数
- 母函数
- hdu 1085
- hdu1028 母函数
- hdu 1085母函数的应用
- hdu 1085母函数的应用
- Square Coins
- Big Event in HDU(多重背包或母函数)
- Holding Bin-Laden Captive!(母函数或多重背包)
- Ignatius and the Princess III(母函数或动态规划)
- hdu 1398 (母函数)
- HDU 1028 Ignatius and the Princess III(母函数)
- hdu 1398 Square Coins(母函数)
- HDU 1709 The Balance【特殊母函数】
- HDU 2082 找单词【母函数】
- hdoj 2566 统计硬币
- Hdu 2079 (母函数应用)