HDU 1521
指数型生成函数。做这题时,回去看看组合数学才知道,指数生成函数求的就是多重集合的r排列数。
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #define N 15
- using namespace std;
- struct PQ{
- int p,q;
- };
- PQ c1[N],c2[N];
- int num[N];
- PQ cal;
- int Q[N];
- int gcd(int a,int b){
- if(b==0) return a;
- return gcd(b,a%b);
- }
- PQ addsum(PQ a,PQ b){
- PQ tmp;
- tmp.q=a.q*b.q;
- tmp.p=a.p*b.q+a.q*b.p;
- int g=gcd(max(tmp.p,tmp.q),min(tmp.p,tmp.q));
- tmp.p/=g; tmp.q/=g;
- return tmp;
- }
- int main(){
- int n,m,ptmp,qtmp;
- Q[0]=1;
- for(int i=1;i<N;i++)
- Q[i]=Q[i-1]*i;
- while(scanf("%d%d",&n,&m)!=EOF){
- for(int i=1;i<=n;i++)
- scanf("%d",&num[i]);
- for(int i=0;i<N;i++){
- c1[i].p=c2[i].p=0;
- c1[i].q=c2[i].q=1;
- }
- for(int i=0;i<=num[1];i++)
- c1[i].p=1,c1[i].q=Q[i];
- for(int i=2;i<=n;i++){
- for(int j=0;j<N;j++){
- for(int k=0;k+j<N&&k<=num[i];k++){
- ptmp=1,qtmp=Q[k];
- cal.p=ptmp*c1[j].p;cal.q=qtmp*c1[j].q;
- ptmp=gcd(max(cal.p,cal.q),min(cal.p,cal.q));
- cal.p/=ptmp; cal.q/=ptmp;
- c2[k+j]=addsum(cal,c2[k+j]);
- }
- }
- for(int j=0;j<N;j++)
- c1[j]=c2[j],c2[j].p=0,c2[j].q=1;
- }
- printf("%d\n",c1[m].p*Q[m]/c1[m].q);
- }
- return 0;
- }
HDU 1521的更多相关文章
- 排列组合 HDU - 1521 -指数型母函数
排列组合 HDU - 1521 一句话区分指数型母函数和母函数就是 母函数是组合数,指数型母函数是排列数 #include<bits/stdc++.h> using namespace s ...
- hdu 1521 排列组合 —— 指数型生成函数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1521 标准的指数型生成函数: WA了好几遍,原来是多组数据啊囧: 注意精度,直接强制转换(int)是舍去小 ...
- HDU 1521 排列组合 指数型母函数
排列组合 Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Status D ...
- Hdu 1521 排列组合
a1 n1 a2 n2 ... ak nkn=n1+n2+...+nk从n个数中选r个排列(不是组合噢)// 指数型母函数// 模板#include <iostream> #include ...
- HDU 1521 排列组合 (母函数)
题目链接 Problem Description 有n种物品,并且知道每种物品的数量.要求从中选出m件物品的排列数.例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB&qu ...
- HDU 1521 指数型母函数
方法一: DFS 方法二:生成函数 每个数可以重复一定次数,求排列组合数,这是裸的指数型生成函数: #include <bits/stdc++.h> using namespace std ...
- hdu 1521 排列组合【指数型生成函数】
根据套路列出式子:\( \prod_{i=1}^{n}\sum_{j=0}^{c[i]}\frac{x^j}{j!} \),然后暴力展开即可 #include<iostream> #inc ...
- 母函数 <普通母函数(HDU - 1028 ) && 指数型母函数(hdu1521)>
给出我初学时看的文章:母函数(对于初学者的最容易理解的) 普通母函数--------->HDU - 1028 例题:若有1克.2克.3克.4克的砝码各一 枚,能称出哪几种重量?各有几种可能方案? ...
- HDU——PKU题目分类
HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 ...
随机推荐
- BA--空调系统一次泵和二次泵区别
通常来说,空调系统是按照满负荷设计的,但实际运行中,满负荷运行的 时间不足 3% ,空调设备绝大部分时间内在远低于额定负荷的情况下运转.在 部分负荷下,虽然冷水机组可以根据实际负荷调节相应的冷量输出, ...
- 双向链表的实现与操作(C语言实现)
双向链表也叫双链表,是链表的一种,它的每一个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的随意一个结点開始,都能够非常方便地訪问它的前驱结点和后继结点. 单链表的局限 1.单 ...
- Java Pattern Matcher 正则表达式需要转义的字符
见:http://blog.csdn.net/bbirdsky/article/details/45368709 /** * 转义正则特殊字符 ($()*+.[]?\^{},|) * * @param ...
- 16进制颜色字符串转为UIColor
//16进制颜色(html颜色值)字符串转为UIColor +(UIColor *) hexStringToColor: (NSString *) stringToConvert { NSS ...
- 12. mysql show status
状态名 作用域 详解 Aborted_clients Global 因为client没有正确关闭连接导致client终止而中断的连接数 Aborted_connects Global 试图连接到MyS ...
- 疯狂Java学习笔记(72)-----------大话程序猿面试
大话程序猿面试 10个我最喜欢问程序猿的面试问题 程序猿面试不全然指南 10个经典的C语言面试基础算法及代码 程序猿的10大成功面试技巧 程序猿选择公司的8个标准 编程开发 8个值得关注的PHP安全函 ...
- 2015.04.21,外语,读书笔记-《Word Power Made Easy》 12 “如何奉承朋友” SESSION 32
TEASER PREVIEW 如何描述这些人: 很友好.容易相处的人: 不知疲倦的人: 简单.直率..aboveboard([ə'bʌv'bɔ:d] adv. 光明正大地, 率直地 adj. 光明正大 ...
- 风暴英雄 http 302重定向 正在等待游戏模式下载完成
抓包 在抓到的数据包里面,看到一个http get请求,右键选中,然后follow stream wireshark自动进行数据包过滤tcp.stream eq 1340,并且可以看到完整的数据通讯 ...
- 【POJ 1733】 Parity Game
[题目链接] http://poj.org/problem?id=1 [算法] 并查集 [代码] #include <algorithm> #include <bitset> ...
- Linux就该这么学 20181009(第十二章 SAMBA)
参考链接https://www.linuxprobe.com Samba 跨平台的文件共享 linux-linux linux-windows /etc/samba/smb.conf 里面 []这个名 ...