Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u

Submit Status

Description

有n种物品,并且知道每种物品的数量。要求从中选出m件物品的排列数。例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB","BA"两种。 
 

Input

每组输入数据有两行,第一行是二个数n,m(1<=m,n<=10),表示物品数,第二行有n个数,分别表示这n件物品的数量。
 

Output

对应每组数据输出排列数。(任何运算不会超出2^31的范围)
 

Sample Input

2 2 1 1
 

Sample Output

2
 

Source

指数型生成函数公式(其中一个):

#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
#define M 15
double fac[M];
void fun()//求n的阶乘 函数
{
int i;
fac[]=;
for(i=;i<=;i++)
fac[i]=i*fac[i-];
}
int main()
{
int n,m;
int z[M];
double a[M],b[M];
fun();
while(scanf("%d%d",&n,&m)!=EOF)
{
int i,j,k;
for(i=;i<n;i++)
cin>>z[i];
memset(a,,sizeof(a));
memset(b,,sizeof(b));
for(i=;i<=z[];i++)
{
a[i]=1.0/fac[i];
}
for(i=;i<n;i++)
{
for(j=;j<=m;j++)
for(k=;k<=z[i]&&k+j<=m;k++)//2个条件:1个k<=z[i]还有为了防止k>=10 和防止k+j>M
{
b[k+j]+=(a[j]*1.0/fac[k]);//应该除以fac[k]
}
for(j=;j<=m;j++)
{
a[j]=b[j];
b[j]=;
}
} printf("%.0lf\n",a[m]*fac[m]);//或者前面加上头文件<math.h> 然后输出printf("%d\n",(int)(floor(a[m]*fac[m]+0.5)));也是对的 ;%.0lf已经四舍五入了,所以用这个就显得特别简单 或者printf("%.0lf\n",floor(a[m]*fac[m]+0.5));或者printf("%d\n",(int)(a[m]*fac[m]+0.5)); } return ;
}

指数阶一般求解的问题:已知有n种颜色的球,第1种X1个,第2种X2个,第3种X3个。。。求从中取m个的方案数(组合数)。

公式中的ak/k!就是所求的组合数,ak为排列数。

只要把求系数的时候每个都相应的 除以i的阶乘即可

HDU 1521 排列组合 指数型母函数的更多相关文章

  1. HDU 1521 排列组合 (母函数)

    题目链接 Problem Description 有n种物品,并且知道每种物品的数量.要求从中选出m件物品的排列数.例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB&qu ...

  2. hdu 1521 排列组合 —— 指数型生成函数

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1521 标准的指数型生成函数: WA了好几遍,原来是多组数据啊囧: 注意精度,直接强制转换(int)是舍去小 ...

  3. hdu1521 排列组合(指数型母函数)

    题意: 有n种物品,并且知道每种物品的数量ki.要求从中选出m件物品的排数.         (全题文末) 知识点: 普通母函数 指数型母函数:(用来求解多重集的排列问题) n个元素,其中a1,a2, ...

  4. Hdu 1521 排列组合

    a1 n1 a2 n2 ... ak nkn=n1+n2+...+nk从n个数中选r个排列(不是组合噢)// 指数型母函数// 模板#include <iostream> #include ...

  5. hdu1521 排列组合 指数型母函数模板题

    排列组合 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  6. hdu1521:排列组合---指数型母函数

    题意: n种元素,每种有 ni个,选出 m 个的排列有多少种 题解: 指数型母函数的裸题 x^n 项的系数为  an/n!.... 代码如下: #include <iostream> #i ...

  7. hdu 1521 排列组合【指数型生成函数】

    根据套路列出式子:\( \prod_{i=1}^{n}\sum_{j=0}^{c[i]}\frac{x^j}{j!} \),然后暴力展开即可 #include<iostream> #inc ...

  8. hdu 4535(排列组合之错排公式)

    吉哥系列故事——礼尚往来 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  9. hdu 4497(排列组合+LCM和GCD)

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

随机推荐

  1. 【SDOI2008】解题汇总

    好叭我真的是闲的了... /---------------------------------------------/ BZOJ-2037 [SDOI2008]Sue的小球 DP+相关费用提前计算 ...

  2. BZOJ4195 程序自动分析

    Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或x ...

  3. java将数据写入到txt文件中(txt有固定的格式)

    java将数据写入到txt文件中,这个应该对于学过java I/O的人来说是很简单的事情了,但是如果要将数据以固定的格式写入到txt文件中,就需要一定的技巧了. 这里举个简单的例子,以供参考: 比如我 ...

  4. nginx在linux中安装

    下载地址:http://qkxue.net/ 1.2    解压 使用命令:tar zxvf nginx-1.8.1.tar.gz 1.3    切换至解压目录,安装依赖 yum -y install ...

  5. Fast-cgi cgi nginx php-fpm 的关系 (转

    Fast-cgi  cgi  nginx  PHP-fpm 的关系 Fast-cgi是由cgi发展而来,是http服务器(http,nginx等)和动态脚本语言(php,perl等)之间的的通信接口, ...

  6. Struts2几种传值

    1.url向action传值 url为 http://localhost/txyl/teacher_info?method:teacher_info&teacher_seq=dedafdsf3 ...

  7. ID

    id 编辑 身份标识号.账号.唯一编码.专属号码.工业设计.国家简称.法律词汇.通用账户.译码器.软件公司等,各类专有词汇缩写. 身份证,身份识别,是一种身份证明. 中文名 身份证,帐号,工业设计,通 ...

  8. C++ 迭代器 基础介绍

    C++ 迭代器 基础介绍 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围.迭代器就如同一个指针.事实上,C++的指针也是一种迭代器.但是,迭代器不仅仅是指针,因此你不能认为他们一定 ...

  9. stripslashes — 反引用一个引用字符串

    stripslashes (PHP 4, PHP 5) stripslashes — 反引用一个引用字符串 Report a bug  说明 string stripslashes ( string  ...

  10. 二分图最大匹配的K&#246;nig定理及其证明

     二分图最大匹配的K?nig定理及其证明 本文将是这一系列里最短的一篇,因为我只打算把K?nig定理证了,其它的废话一概没有.    以下五个问题我可能会在以后的文章里说,如果你现在很想知道的话,网上 ...