hdu 1521(指数型母函数)
2016-03-31 16:25
357 查看
题意:有n种物品,并且知道每种物品的数量。要求从中选出m件物品的排列数。例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB","BA"两种。
分析:很典型的指数型母函数的题 指数型母函数;
专门求解这个问题的x^m的系数除以m!就是结果 采用乘法求解ps:这题数据很水,不需要大数
代码如下:
分析:很典型的指数型母函数的题 指数型母函数;
专门求解这个问题的x^m的系数除以m!就是结果 采用乘法求解ps:这题数据很水,不需要大数
代码如下:
#include <set> #include <map> #include <stack> #include <queue> #include <math.h> #include <vector> #include <string> #include <utility> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <algorithm> #include <functional> using namespace std; double jie[]={1,1,2,6,24,120,720,5040,40320,362880,3628800};//先把阶乘搞出来 double a[100],b[100]; int main(){ int n,m; int num; while(scanf("%d%d",&n,&m)!=EOF){ memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); a[0]=1; for(int i=1;i<=n;i++){ scanf("%d",&num); for(int j=0;j<=n;j++){ for(int k=0;k<=num;k++){ b[j+k]+=1.0/jie[k]*a[j]; // cout<<j+k<<" "<<"SADDS "<<b[j+k]<<endl; } } for(int k=0;k<=n;k++){ a[k]=b[k]; b[k]=0; } } double sum=a[m]*jie[m]; printf("%.0f\n",sum); } return 0; }//为什么要用double呢 因为double才能除完再乘才不变
相关文章推荐
- 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 (母函数应用)