题解-bzoj4221 JOI2012kangaroo
Problem
题意:给定\(n\)只袋鼠,每只袋鼠有俩属性\(a,b\),若\(a_i\leq b_j\),则\(i\)是可以被\(j\)放置在袋子里的,求经过一系列放置操作后无法进行操作时的状态有多少种可能(每只袋鼠只能被一只袋鼠放在袋子里,同时也只能放一只袋鼠在袋子里)
\(n\leq 300,\forall i\in[1,n]a_i\geq b_i\)
Solution
将每只袋鼠拆成出点和入点后做匹配,相当于剩余未匹配点中\(\min a\geq \max b\)的匹配方案数
由于\(a_i\geq b_i\)保证不可能自己连向自己,相当于是自由匹配,所以点与点之间的顺序是没有任何关系的,考虑将两者从大到小排序
设\(f[i][j][k]\)表示当前考虑到第\(i\)只袋鼠的体积,这\(i\)只袋鼠中有\(j\)只已经被匹配,设\(t\)为第\(i\)只袋鼠能塞进的最小口袋(\(t\)也递增),则\(k\)表示前\(t\)个口袋中与袋鼠\([i+1,n]\)中匹配的数量
考虑到在定义下的\(f[i][j][k]\)中,这\(j\)只已经被匹配的袋鼠所对应的口袋一定在区间\([1,t]\)中,所以口袋\([1,t]\)分为三类:
- ① 和区间\([1,i]\)内共\(j\)只袋鼠匹配的口袋,共\(j\)个
- ② 和区间\([i+1,n]\)内共\(k\)只袋鼠匹配的口袋,共\(k\)个
- ③ 自由节点,尚未匹配,共\(t-j-k\)个
理顺了这些可以得到以下仨转移式(一般自己写可能会有情况缺漏,反正我是想了很久)
\]
\]
\]
自然统计答案
\]
Code
#include <bits/stdc++.h>
using namespace std;
#define rg register
template <typename _Tp> inline _Tp read(_Tp&x){
char c11=getchar();x=0;while(!isdigit(c11))c11=getchar();
while(isdigit(c11))x=x*10+c11-'0',c11=getchar();return x;
}
const int N=301,p=1e9+7;
int f[N][N][N],a[N],b[N];
int n,ans;
template <typename _tp> inline void pls(int&A,_tp B){A=A+B<p?A+B:A+B-p;}
inline bool cmp(const int&A,const int&B){return A>B;}
void init();void work();void print();
int main(){init();work();print();return 0;}
void work(){
f[0][0][0]=1;
for(rg int i=1,t=1;i<=n;++i){
if(!t)++t;
while(a[i]<b[t]&&t<=n)++t;--t;
for(rg int j=0;j<i;++j)
for(rg int k=0;k+j<=t;++k){
pls(f[i][j][t-j],f[i-1][j][k]);
pls(f[i][j+1][k],1ll*f[i-1][j][k]*(t-j-k)%p);
if(k)pls(f[i][j+1][k-1],1ll*f[i-1][j][k]*k%p);
}
}
}
void print(){
for(rg int i=0;i<=n;++i)
pls(ans,f[n][i][0]);
printf("%d\n",ans);
}
void init(){
read(n);
for(rg int i=1;i<=n;++i)
read(a[i]),read(b[i]);
sort(a+1,a+n+1,cmp);
sort(b+1,b+n+1,cmp);
}
题解-bzoj4221 JOI2012kangaroo的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- netty的对象传输
pom <!-- https://mvnrepository.com/artifact/io.netty/netty-all --> <dependency> <grou ...
- JavaScript中的this指向规则
首先,JavaScript的this指向问题并非传说中的那么难,不难的是机制并不复杂,而被认为不好理解的是逻辑关系和容易混淆的执行上下文.这篇博客也就会基于这两个不好理解的角度来展开,如要要严格的来对 ...
- JQuery和ASP.NET分别实现级联下拉框效果
在学习JQuery之前知道下拉框的级联效果可以通过asp.net控件实现,现在学习了JQuery,知道了JQuery和select也能实现.我分别举两个小例子说明这两种方法如何实现. 1.用JQuer ...
- 解析ArcGis拓扑——根据拓扑错误记录提取shp文件、导出Excel表格
在ArcGis拓扑检查的流程——以面重叠检查为例中讲述了如何在ArcGis进行拓扑检查与修改. 在实际操作中,有时我们还需要将ArcGis拓扑检查的结果制作成报告或者提取错误信息反馈作业方. 本文仍然 ...
- SQL Server进阶 遍历表的几种方法
https://www.cnblogs.com/mcgrady/p/4182486.html
- 按科室统计 2.181222版本 关联查询join 不对
SQL: select t0.deptName, t0.deptId, t0.startTime, t0.endTime, IFNULL(t0.num,) as num0, IFNULL(t1.num ...
- string赋值和操作
string赋值 string s1; //默认构造函数,s1为空串 string s1(s2); //将s2初始化为s1的一个副本 string s3("value"); //将 ...
- postfix 邮箱接收限制
Postfix 限制 QQ 邮箱发送到 我的 test.com 域下邮箱. 1.编辑 main.cf 添加限制: smtpd_sender_restrictions = check_sender_a ...
- matplotlib-2D绘图库-面向对象
个人理解:plt--画本 figure--产生画纸 子图 import numpy as np import matplotlib.pyplot as plt #解决能显示中文 plt.rcPa ...
- 第25月第8天 100-Days-Of-ML-Code
1.100-Days-Of-ML-Code https://github.com/Avik-Jain/100-Days-Of-ML-Code https://github.com/llSourcell ...