hdu(1521)——排列组合
来源:互联网 发布:淘宝店招全屏显示 编辑:程序博客网 时间:2024/06/03 21:46
题意:
Problem Description
有n种物品,并且知道每种物品的数量。要求从中选出m件物品的排列数。例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB","BA"两种。
Input
每组输入数据有两行,第一行是二个数n,m(1<=m,n<=10),表示物品数,第二行有n个数,分别表示这n件物品的数量。
Output
对应每组数据输出排列数。(任何运算不会超出2^31的范围)
思路:
这道题是一道指数型母函数的题。也就是说它是一道用来求排列数的问题。
直接套模板。。
这里用了double型。可能会存在精度误差。。
#include<cstdio>#include<cstring>#include<map>#include<set>#include<cmath>#include<algorithm>#include<vector>#include<queue>#include<stack>#include<iostream>using namespace std;typedef __int64 ll;typedef unsigned __int64 ULL;#define inf 99999999#define maxn 15double c1[maxn],c2[maxn];int a[maxn];double Factorial(double x){ double ans=1.0; for(int i=1;i<=x;i++){ ans=ans*i; } return ans;}int main(){ int n,m; while(~scanf("%d%d",&n,&m)){ memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } for(int i=0;i<=a[0];i++){ c1[i]=1.0/Factorial(1.0*i); } for(int i=1;i<n;i++){ for(int j=0;j<=n;j++){ for(int k=0;k+j<=n&&k<=a[i];k++){ c2[j+k]+=c1[j]/Factorial(k*1.0); } } for(int j=0;j<=n;j++){ c1[j]=c2[j]; c2[j]=0; } } printf("%.0f\n",c1[m]*Factorial(m)); } return 0;}
0 0
- hdu(1521)——排列组合
- [母函数]HDU 1521——排列组合
- hdu 1521 排列组合
- HDU 1521 排列组合
- hdu 1521 排列组合
- hdu 1521 排列组合 组合
- HDU 1521 排列组合
- HDU 1521排列组合
- 数学 ( 排列组合 )——HDU 5194
- HDU's ACM 1521 排列组合
- 母函数 HDU 1521 排列组合
- HDU 1521 排列组合(指数型母函数)
- HDU 1521 排列组合 指数型母函数
- [ACM] hdu 1521 排列组合(组合+DFS)
- Hdu 1521 排列组合 指数型母函数
- hdu-1521-排列组合(母函数)
- hdu 1521 排列组合(指数型母函数)
- 指数型母函数:hdu 1521 排列组合
- android设置状态栏颜色(沉浸式状态栏)
- Andriod中绘(画)图----Canvas的使用详解
- 仿QQ侧滑面板(二)
- 杭电题库刷题记录2014
- 《编写可读代码的艺术》读书笔记
- hdu(1521)——排列组合
- JNI接口详解
- 动态规划-hdu1227Fast Food
- 使用VS2015打包winform程序安装包简单方法(不需要InstallShield)
- 【NYOJ】[96]n-1位数
- &#x是什么编码以及转换方法(GB2312 UNICODE)
- 仿QQ侧滑面板(三)
- linux原始套接字(2)-icmp请求与接收
- 使用注解springmvc配合jsp/ajax/json,实现简单的jsp遍历后台数据