Problem

bzoj

题意:给定\(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\)个

理顺了这些可以得到以下仨转移式(一般自己写可能会有情况缺漏,反正我是想了很久)

\[f[i][j][t-j]+=f[i-1][j][k]
\]

\[f[i][j+1][k]+=f[i-1][j][k]\cdot (t-j-k)
\]

\[f[i][j+1][k-1]+=f[i-1][j][k]\cdot k
\]

自然统计答案

\[Ans=\sum_{i=0}^nf[n][i][0]
\]

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的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. netty的对象传输

    pom <!-- https://mvnrepository.com/artifact/io.netty/netty-all --> <dependency> <grou ...

  2. JavaScript中的this指向规则

    首先,JavaScript的this指向问题并非传说中的那么难,不难的是机制并不复杂,而被认为不好理解的是逻辑关系和容易混淆的执行上下文.这篇博客也就会基于这两个不好理解的角度来展开,如要要严格的来对 ...

  3. JQuery和ASP.NET分别实现级联下拉框效果

    在学习JQuery之前知道下拉框的级联效果可以通过asp.net控件实现,现在学习了JQuery,知道了JQuery和select也能实现.我分别举两个小例子说明这两种方法如何实现. 1.用JQuer ...

  4. 解析ArcGis拓扑——根据拓扑错误记录提取shp文件、导出Excel表格

    在ArcGis拓扑检查的流程——以面重叠检查为例中讲述了如何在ArcGis进行拓扑检查与修改. 在实际操作中,有时我们还需要将ArcGis拓扑检查的结果制作成报告或者提取错误信息反馈作业方. 本文仍然 ...

  5. SQL Server进阶 遍历表的几种方法

    https://www.cnblogs.com/mcgrady/p/4182486.html

  6. 按科室统计 2.181222版本 关联查询join 不对

    SQL: select t0.deptName, t0.deptId, t0.startTime, t0.endTime, IFNULL(t0.num,) as num0, IFNULL(t1.num ...

  7. string赋值和操作

    string赋值 string s1; //默认构造函数,s1为空串 string s1(s2); //将s2初始化为s1的一个副本 string s3("value"); //将 ...

  8. postfix 邮箱接收限制

    Postfix 限制 QQ 邮箱发送到 我的 test.com 域下邮箱. 1.编辑 main.cf  添加限制: smtpd_sender_restrictions = check_sender_a ...

  9. matplotlib-2D绘图库-面向对象

    个人理解:plt--画本    figure--产生画纸 子图 import numpy as np import matplotlib.pyplot as plt #解决能显示中文 plt.rcPa ...

  10. 第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 ...