Hdu 1521 排列组合
a1 n1
a2 n2
...
ak nk
n=n1+n2+...+nk
从n个数中选r个排列(不是组合噢)
// 指数型母函数
// 模板
#include <iostream>
#include <string>
#include<sstream>
#include <cmath>
#include <map>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define LL __int64//long long
struct node
{
LL u,d; // u/d
node(){}
node(LL a,LL b){
u=a;
d=b;
}
LL gcd(LL a,LL b)
{
LL r;
while(r=a%b){a=b;b=r;}
return b;
}
node operator +(node no)
{
LL da=gcd(d,no.d);
LL son=no.d/da*u+d/da*no.u;
LL mather=no.d/da*d;
da=gcd(son,mather);
return node(son/da,mather/da);
}
}Ge[],tp[];
LL f[];
int main()
{
int i,j,k;
f[]=;
for(i=;i<=;i++)
f[i]=f[i-]*i;
int n,m; while(scanf("%d %d",&n,&m)!=EOF)
{
// memset(Ge,0,sizeof(Ge));
Ge[].u=Ge[].d=;
for(i=;i<=m;i++)
Ge[i].u=,Ge[i].d=;
for(i=;i<=m;i++)
tp[i].u=,tp[i].d=;
while(n--)
{
scanf("%d",&k);
// memset(tp,0,sizeof(tp)); for(i=;i<=k&&i<=m;i++)
for(j=;j+i<=m;j++)
{
tp[i+j]=tp[i+j]+ node(Ge[j].u,Ge[j].d*f[i]);
//printf("%I64d %I64d\n",tp[i].u,tp[i].d);
}
for(i=;i<=m;i++)
Ge[i]=tp[i];//printf("%I64d %I64d\n",Ge[i].u,Ge[i].d),
} printf("%I64d\n",f[m]/Ge[m].d*Ge[m].u);//f[m]*Ge[m].u);
}
return ;
}
Hdu 1521 排列组合的更多相关文章
- HDU 1521 排列组合 指数型母函数
排列组合 Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Status D ...
- HDU 1521 排列组合 (母函数)
题目链接 Problem Description 有n种物品,并且知道每种物品的数量.要求从中选出m件物品的排列数.例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB&qu ...
- hdu 1521 排列组合 —— 指数型生成函数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1521 标准的指数型生成函数: WA了好几遍,原来是多组数据啊囧: 注意精度,直接强制转换(int)是舍去小 ...
- hdu 1521 排列组合【指数型生成函数】
根据套路列出式子:\( \prod_{i=1}^{n}\sum_{j=0}^{c[i]}\frac{x^j}{j!} \),然后暴力展开即可 #include<iostream> #inc ...
- hdu 4535(排列组合之错排公式)
吉哥系列故事——礼尚往来 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- hdu 4497(排列组合+LCM和GCD)
GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- hdu 4705 排列组合
思路:枚举能是A,B,C在一条简单路径上的中点. 计算多少个几何能满足.在用总数减去 #pragma comment(linker, "/STACK:16777216") #inc ...
- 排列组合 HDU - 1521 -指数型母函数
排列组合 HDU - 1521 一句话区分指数型母函数和母函数就是 母函数是组合数,指数型母函数是排列数 #include<bits/stdc++.h> using namespace s ...
- 排列组合+组合数取模 HDU 5894
// 排列组合+组合数取模 HDU 5894 // 题意:n个座位不同,m个人去坐(人是一样的),每个人之间至少相隔k个座位问方案数 // 思路: // 定好m个人 相邻人之间k个座位 剩下就剩n-( ...
随机推荐
- JAVA IO 类库详解
JAVA IO类库详解 一.InputStream类 1.表示字节输入流的所有类的超类,是一个抽象类. 2.类的方法 方法 参数 功能详述 InputStream 构造方法 available 如果用 ...
- Hadoop 在windows 上伪分布式的安装过程
第一部分:Hadoop 在windows 上伪分布式的安装过程 安装JDK 1.下载JDK http://www.oracle.com/technetwork/java/javaee/d ...
- 多线程包:java.util.concurrent,
Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent,
- ios开发--苹果企业开发者账号
苹果企业开发者账号添加多个开发成(组)员的方法 如果你们公司有一个帐号,你是管理员,加入组员的办法如下: 第一步:进入Member Center页 第二步:点击people,会见到 第三步:点击Inv ...
- Jackson学习笔记-对象序列化
一.用ObjectMapper.readValue(jsonString, Student.class) , ObjectMapper.writeValueAsString(student) impo ...
- Struts2笔记——ONGL表达式语言
OGNL是ObjectGraphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts 2框架使用OGNL作为默认的表达式语言. ----------- ...
- 【web性能】让css更简洁、高效
用了这么多年的CSS,现在才明白CSS的真正匹配原理,不知道你是否也跟我一样? 看1个简单的CSS: DIV#divBox p span.red{color:red;},按习惯我们对这个CSS 的 ...
- http://blog.csdn.net/sd0902/article/details/8395677
http://blog.csdn.net/sd0902/article/details/8395677
- 设置 Firewalld 防火墙控制对系统的访问
1.检查 server101 的网卡,记住第二个网卡的名称 [root@server101 ~]# nmcli device DEVICE TYPE STATE CONNECTION br0 brid ...
- Linux命令-cut
cut命令用于通过列来提取文本字符 格式:cut [参数] 文本 将/etc/paswd文件以:分割(-d:),获取第七列的内容(-f1) [root@localhost test]# cut -d: ...