题解-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 & ...
随机推荐
- 14、JDBC-DbUtils-API
DbUtils /** * DbUtils :提供如关闭连接.装载 JDBC 驱动等操作的工具类,里面方法都是静态的. * * public static void close(…) throws j ...
- python 面向对象(三)类与类之间的关系 初始化方法一些类
###################总结################# 面试的时候 让写python一些特殊方法 __init__ 创建对象的时候初始化 __new__对象实例化调用第一个方法 ...
- Git(工作区和暂存区概念)
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工 ...
- 关于Mysql的高级查询的操作
前言:作为一名后端的程序员操作数据库的能力是我们基本的技能,而连表查询是我们的这个技能的关键点所在.注意这里顾明思义是对数据的查询的操作 (一).联合查询(关键字union/union all) 什么 ...
- 那些年我们没能bypass的xss filter[from wooyun]
原文链接:http://zone.wooyun.org/content/6899 小弟初学xss才10天.不过个人很喜欢收集xss payload.在这里把自己平时挖xss时会用到的payloads列 ...
- 前台ajax传参数,后台spring mvc用对象接受
第二种方法:利用spring mvc的机制,调用对象的get方法,要求对象的属性名和传的参数名字一致(有兴趣的同学看 springmvc源码) 1.将参数名直接写成对象的属性名 $.ajax({ ur ...
- [Android] Android Studio 使用config.gradle统一管理项目的依赖库
gradle支持自定义config.gradle,在GoogleSamples中提到我们必须使用关键字ext(对应ExtraPropertitesExtension的实例)来定义动态属性 如何实现: ...
- Java面试经典题目合集
32 1.”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法? “static”关键字表明一个成员变量或者是成员方法与类相关,可以在 ...
- ext.net 实现gridpanel checkbox锁定
<%@ Page Language="C#" %> <%@ Register Assembly="Ext.Net" Namespace=&qu ...
- asp.net mvc 多文件上传
@{ ViewBag.Title = "多文件上传测试"; } <h2>多文件上传测试</h2> <form action="/Demo/I ...