BZOJ4221 : JOI2012 kangaroo
将袋鼠大小和口袋大小分别从小到大排序。
枚举从左往右第一只没有被放入任何口袋的袋鼠$x$,那么$x$之前的所有袋鼠、以及$x$能装入的所有口袋都应该在匹配边上。
按这只袋鼠将上下两个序列分为两部分,设$f[i]$表示左边内部有$i$条匹配边的方案数,$g[i]$表示右边内部有$i$条匹配边的方案数。
那么枚举左右各剩下$i$个点未匹配,则对答案的贡献是$f[L-i]\times g[R-i]\times i!$。
对于$f,g$的求解,假设是求$f$,那么从右往左考虑每个袋鼠,限制会越来越松。
所以设$dp[i][j]$表示考虑了$i$开始到最后一只袋鼠,目前有$j$条匹配边的方案数。
对于第$i-1$只袋鼠,它可选的匹配边条数是固定的,减去$j$就是它匹配某个口袋的方案数。
时间复杂度$O(n^3)$。
#include<cstdio>
#include<algorithm>
const int N=305,P=1000000007;
int n,i,j,ca,cb,l,r,a[N],b[N],A[N],B[N],fac[N],f[N],g[N],dp[N][N],ans;
inline void up(int&a,int b){a+=b;if(a>=P)a-=P;}
inline void dpl(){
int i,j,k,o;
for(i=1;i<=ca+1;i++)for(j=0;j<=ca;j++)dp[i][j]=0;
dp[ca+1][0]=1;
for(i=ca;i;i--){
for(k=0,o=cb;o;o--)if(A[i]<B[o])k++;else break;
for(j=0;j<=ca;j++)if(dp[i+1][j]){
up(dp[i][j],dp[i+1][j]);
up(dp[i][j+1],1LL*dp[i+1][j]*(k-j)%P);
}
}
for(l=ca,i=0;i<=ca;i++)f[i]=dp[1][i];
}
inline void dpr(){
int i,j,k,o;
for(i=0;i<=cb;i++)for(j=0;j<=cb;j++)dp[i][j]=0;
dp[0][0]=1;
for(i=1;i<=cb;i++){
for(k=0,o=1;o<=ca;o++)if(A[o]<B[i])k++;else break;
for(j=0;j<=cb;j++)if(dp[i-1][j]){
up(dp[i][j],dp[i-1][j]);
up(dp[i][j+1],1LL*dp[i-1][j]*(k-j)%P);
}
}
for(r=cb,i=0;i<=cb;i++)g[i]=dp[cb][i];
}
int main(){
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]);
std::sort(a+1,a+n+1),std::sort(b+1,b+n+1);
for(fac[0]=i=1;i<=n;i++)fac[i]=1LL*fac[i-1]*i%P;
for(i=1;i<=n;i++){
ca=cb=0;
for(j=1;j<i;j++)A[++ca]=a[j];
for(j=1;j<=n;j++)if(b[j]<=a[i])B[++cb]=b[j];
dpl();
ca=cb=0;
for(j=i+1;j<=n;j++)A[++ca]=a[j];
for(j=1;j<=n;j++)if(b[j]>a[i])B[++cb]=b[j];
dpr();
for(j=0;j<=l&&j<=r;j++)up(ans,1LL*f[l-j]*g[r-j]%P*fac[j]%P);
}
return printf("%d",ans),0;
}
BZOJ4221 : JOI2012 kangaroo的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 4221 [JOI2012春季合宿]Kangaroo (DP)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4221 题解 orz WYC 爆切神仙DP 首先将所有袋鼠按大小排序.考虑从前往后DP, ...
- Exercises - Kangaroo
Write a definition for a class named Kangaroo with the following methods: An __init__ method that in ...
- 6656 Watching the Kangaroo
6656 Watching the KangarooDay by day number of Kangaroos is decreasing just liketiger, whale or lion ...
- Gym 101981K - Kangaroo Puzzle - [玄学][2018-2019 ACM-ICPC Asia Nanjing Regional Contest Problem K]
题目链接:http://codeforces.com/gym/101981/problem/K Your friend has made a computer video game called “K ...
- 【BZOJ4388】JOI2012 invitation 堆+线段树+并查集(模拟Prim)
[BZOJ4388]JOI2012 invitation Description 澳洲猴举办了一场宴会,他想要邀请A个男生和B个女生参加,这A个男生从1到A编号,女生也从1到B编号.现在澳洲猴知道n组 ...
- E - Cheap Kangaroo(求多个数的最大公约数)
Description There are N kangaroos going out to eat at an Indian restaurant. The ith kangaroo wants t ...
- Gym - 101981K The 2018 ICPC Asia Nanjing Regional Contest K.Kangaroo Puzzle 暴力或随机
题面 题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走, 如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合 题解:我们可 ...
- 第三十五个知识点:给针对ECDLP问题的Pollard rho,Pollard "Kangaroo",parallel Pollard rho攻击的一个粗略的描述
第三十五个知识点:给针对ECDLP问题的Pollard rho,Pollard "Kangaroo",parallel Pollard rho攻击的一个粗略的描述 我们的目标是对任 ...
随机推荐
- 安装java时,配置环境变量classpath的作用
想必大家在安装javaSE或其它版本时会注意到,在配置环境变量path之后,还需要新建一个名为CLASSPATH,变量值设为 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt. ...
- saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy
saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy 下载haproxy1.6.2.tar.gz下载地址:http://www.haproxy.org/download/1. ...
- zabbix3.0.4关于java服务端程序内存溢出的处理
关于java服务端程序内存溢出的处理 java服务端程序内存溢出会产生jvm.log文件,此时程序会挂掉,无法正常处理业务,需要重启服务 思路: 当存在jvm.log这个文件的时候则触发clean_j ...
- JS/Jquery版本的俄罗斯方块(附源码分析)
转载于http://blog.csdn.net/unionline/article/details/63250597 且后续更新于此 1.前言 写这个jQuery版本的小游戏的缘由在于我想通过从零到有 ...
- visual studio 2017 installer 安装包制作过程出现的问题---无法注册模块 HRESULT -2147024769 请与您的技术支持人员联系
使用visual studio 2017 installer制作打包程序时如果用到了外部控件需要按以下方式操作: 1.将应用程序及应用程序所用到的所有DLL拷贝到打包目录,加入打包程序之中. 2.将应 ...
- 目标检测的图像特征提取之(一)HOG特征(转)
看过很多介绍HOG的博文,讲的最清楚的是这位博主:http://blog.csdn.net/zouxy09/article/details/7929348 代码如下: #include <ope ...
- 更好用的cmd窗口
cmder是windows下的命令行工具,用来替代windows自带的cmd. 下载地址 下载后自建文件夹并解压,将Cmder.exe所在文件夹路径加入path, windows + r 键入cmde ...
- linux上apache并发数与服务器内存关系计算!
Linunx(本次为ubuntu) apache! 连接数理论上当然是支持越大越好,但要在服务器的能力范围内,这跟服务器的CPU.内存.带宽等都有关系. 查看当前的连接数可以用: ps aux | g ...
- 如何将自己的Image镜像Push到Docker Hub
首先需要一个docker官方账号 这里我添加了一个AspNetCore程序 通过创建了一个镜像(前面提过使用Dockerfile处理了) docker build -t dockertest . 首先 ...
- poj 1631 最多能有多少条不交叉的线 最大非降子序列 (LIS)
左边的数字是1 2 3 4 5.... 右边的数字 第一个输入的和1连 第2个输入的和2连 右边再按从小到大排序 要求连线不能交叉 问最多能有多少条不交叉的线 假如右边有5个1 那么答案会是5 所以是 ...