HDOJ-1521排列组合(指数型母函数)
来源:互联网 发布:单词默写软件 编辑:程序博客网 时间:2024/05/01 07:52
以前曾经写过普通的母函数,但是指数型母函数还没有写过。就在这里整理一下吧。
指数型母函数主要处理排列方案问题。
比如hdoj1521这道题就是典型的指数型母函数问题:
有n种物品,并且知道每种物品的数量。要求从中选出m件物品的排列数。例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB","BA"两种。
下面是从百度文库里找的一篇ppt(如有侵权请告知)
#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;const int N=15;int num[N];double fac[N],c[2][N];void init(){ int i; memset(fac,0,sizeof(fac)); fac[0]=1; for(i=1;i<=11;i++) fac[i]=i*(int)(fac[i-1]+0.1);}void work(int n,int m){ int i,j,k; memset(c,0,sizeof(c)); for(i=0;i<n;i++) scanf("%d",&num[i]); //只有一种物品是无论怎么排列只有一种方案 for(i=0;i<=num[0];i++) c[1][i]=1.0/fac[i]; for(i=2;i<=n;i++) { for(j=0;j<=m;j++) for(k=0;(k<=num[i-1])&&(k+j<=m);k++) c[i&1][j+k]+=c[(i-1)&1][j]/fac[k]; //滚动数组,注意用后清零 for(j=0;j<=m;j++) c[(i-1)&1][j]=0; } printf("%.0lf\n",c[n&1][m]*fac[m]);}int main(){ int n,m; init(); while(scanf("%d%d",&n,&m)==2) work(n,m); return 0;}
0 0
- HDOJ-1521排列组合(指数型母函数)
- HDOJ 题目1521排列组合(指数型母函数,模板)
- 母函数(指数型)系列之 排列组合 hdoj 1521
- HDU 1521 排列组合(指数型母函数)
- HDU 1521 排列组合 指数型母函数
- Hdu 1521 排列组合 指数型母函数
- hdu 1521 排列组合(指数型母函数)
- 指数型母函数:hdu 1521 排列组合
- [HDU 1521] 排列组合 指数型母函数
- HDU 1521 排列组合(指数型母函数)
- HDU 1521 排列组合 指数型母函数
- hdu 1521 排列组合 指数型母函数
- HDU-1521 排列组合 (指数型母函数)
- 排列组合 + 指数型母函数
- HDU 1521 排列组合 (指数型母函数)
- [ACM] hdu 1521 排列组合(指数型母函数)
- HDU 1521 排列组合 (指数型母函数)
- hdu-1521-排列组合(指数型母函数)
- 风轻云淡
- adb logcat 基本用法
- 设计模式那点事—模板模式
- git push 失败,再次git pull 后再次push会产生merge信息,如何避免!
- c语言基础--预处理指令
- HDOJ-1521排列组合(指数型母函数)
- 解决 PHP Fatal error: Call-time pass-by-reference has been removed
- KVO实现原理
- 包罗万象的JS功能,配上刚刚发布的CSS简直是完美,没有前端的IT好好看看
- 关于fragment内的监听事件
- Device eth0 does not seem to be present delaying initialization 问题解决办法
- 开发网站需要注意的事项
- 配置tomcat时遇到publishes and runs j2ee and java ee web projects and server configurations to a local tom
- 反射操作