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-( ...
随机推荐
- (转)Android: NDK编程入门笔记
转自: http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html 为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代 ...
- -ffunction-sections -Wl,--gc-sections
AVR/GCC设置不链接未调用的函数 http://blog.csdn.net/shevsten/article/details/7049688 在AVR Studio4/5的AVR/GCC默认设置下 ...
- @RequestBody 的正确使用办法
1.以前一直以为在SpringMVC环境中,@RequestBody接收的是一个Json对象,一直在调试代码都没有成功,后来发现,其实 @RequestBody接收的是一个Json对象的字符串,而不是 ...
- IOS开发中的几种设计模式
ios开发学习中,经常弄不清楚ios的开发模式,今天我们就来进行简单的总结和探讨~ (一)代理模式 应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现.优势:解耦合敏捷原则 ...
- C++虚函数的缺陷
MFC中的消息机制没有采用C++中的虚函数机制,原因是消息太多,虚函数内存开销太大.在Qt中也没有采用C++中的虚函数机制,原因与此相同,其实这里还有更深层次上的原因,大体说来,多态的底层实现机制只有 ...
- linuxlcd驱动程序编写 mini2440(w35)
先说lcd驱动的框架吧! lcd驱动也有自己的框架,如果没有框架,要我们自己完成所有lcd驱动的代码编写那将是很痛苦的一件事. lcd驱动主要依赖于一个文件,fbmem.c 其实它还依赖几个文件 不 ...
- http://blog.csdn.net/xiamizy/article/details/40781939
http://blog.csdn.net/xiamizy/article/details/40781939
- Android 广播(内部类)
1.广播定义在一个单独的文件中 源码: public class MessageReceiver extends BroadcastReceiver{ @Override public void on ...
- MVC 的知识
MVC 的知识 下载地址: 1. NET Framework4下载地址: http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyI ...
- 局域网聊天软件(winsocket)
LANChat工作整理 2013/8/22 程序实现功能: 局域网聊天软件,启动即可找到在线设备,并能够进行简单的文字聊天. 其实下面这个框图已经说明了程序的绝大部分功能原理. 核心类的程序框图 我觉 ...