题目链接

https://www.lydsy.com/JudgeOnline/problem.php?id=4221

题解

orz WYC 爆切神仙DP
首先将所有袋鼠按大小排序。考虑从前往后DP, 设$f[i][j]$表示前$i$个元素形成了$j$条链。
然而需要处理“套到不能套为止”的问题,因此再加一维: $k$表示目前有多少个元素确定了必须要套后面的袋鼠。
设$cnt[i]$表示有多少个别的袋鼠能套$i$. 那么从$i-1$转移到$i$时$k$的范围是$[0,cnt[i]-(i-j-1)]\(, 因为前\)(i-1)$个袋鼠形成了$j$条链,有$(i-j-1)$个袋鼠已经套上了,由于袋鼠是从大到小排的,那么能套上$i$之前的袋鼠就能套$i$, 因此$(i-j-1)$就是能套上$i$且套了的袋鼠个数,$cnt[i]-(i-j-1)$就是能套上$i$且还没套的袋鼠个数。
转移:
(1) 这个点作为链的起点。这样会导致任何没套上袋鼠的袋鼠都要再套一个比$i$小的袋鼠,因此转移到$dp[i][j+1][cnt[i]-(i-j-1)]$.
(2) 插入到一个链的末尾。这个链有可能是必须要套后面的袋鼠也有可能不是。乘上相应的系数转移即可。
时间复杂度$O(n3)$.
据说有神仙$O(n
2)$做法……哪位大爷教教我啊

代码

#include<bits/stdc++.h>
#define llong long long
using namespace std; const int N = 300;
const int P = 1e9+7;
struct Element
{
int a,b;
bool operator <(const Element &arg) const {return a>arg.a;}
} a[N+3];
int cnt[N+3];
llong dp[2][N+3][N+3];
int n; void updsum(llong &x,llong y) {x = (x+y)%P;} int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++) scanf("%d%d",&a[i].a,&a[i].b);
sort(a+1,a+n+1);
for(int i=1; i<=n; i++) {for(int j=1; j<i; j++) {if(a[j].b>a[i].a) cnt[i]++;}}
dp[0][0][0] = 1ll; int cur = 0,nxt = 1;
for(int i=1; i<=n; i++)
{
memset(dp[nxt],0,sizeof(dp[nxt]));
for(int j=0; j<=i; j++)
{
for(int k=0; k<=cnt[i]-(i-j-1); k++)
{
if(dp[cur][j][k])
{
updsum(dp[nxt][j][k],dp[cur][j][k]*(cnt[i]-(i-j-1)-k));
if(k) {updsum(dp[nxt][j][k-1],dp[cur][j][k]*k);}
updsum(dp[nxt][j+1][cnt[i]-(i-j-1)],dp[cur][j][k]);
}
}
}
cur^=1,nxt^=1;
}
llong ans = 0ll;
for(int i=0; i<=n; i++) {ans = (ans+dp[cur][i][0])%P;}
printf("%lld\n",ans);
return 0;
}

BZOJ 4221 [JOI2012春季合宿]Kangaroo (DP)的更多相关文章

  1. BZOJ 4388 [JOI2012春季合宿]Invitation (线段树、二叉堆、最小生成树)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4388 题解 模拟Prim算法? 原题所述的过程就是Prim算法求最大生成树的过程.于是我 ...

  2. LOJ #2731 [JOI2016春季合宿]Solitaire (DP、组合计数)

    题目链接 https://loj.ac/problem/2731 题解 首先一个很自然的思路是,设\(dp[i][j]\)表示选了前\(i\)列,第\(2\)行第\(i\)列的格子是第\(j\)个被填 ...

  3. LOJ #2733 [JOI2016春季合宿]Sandwiches (DP)

    题目链接 https://loj.ac/problem/2733 题解 神仙题-- 首先可以观察到一个结论: 目标块的两块小三明治一定分别是最后和倒数第二个被吃的. 由此我们可以考虑这两块谁先被吃.这 ...

  4. [JOI2012春季合宿]Rotate (链表)

    题意 题解 又是一道神仙题-- 显然的做法是大力splay,时间复杂度\(O((N+Q)N\log N)\), 可以卡掉. 正解: 使用十字链表维护矩阵,在周围增加第\(0\)行/列和第\((n+1) ...

  5. [JOI2012春季合宿]Constellation (凸包)

    题意 题解 神仙结论题. 结论: 一个点集合法当且仅当其凸包上的两种颜色点分别连续. 证明: 必要性显然. 充分性: 考虑对于一个不同色三角形\(ABC\),不妨设点\(A\)为白点,点\(B,C\) ...

  6. JOI2017 春季合宿:Railway Trip

    自己的AC做法似乎离正解偏了十万八千里而且复杂了不少--不管怎样还是记录下来吧. 题意: 题目链接: JOISC2017 F - AtCoder JOISC2017 F - LOJ \(N\)个车站排 ...

  7. UOJ356 [JOI2017春季合宿] Port Facility 【启发式合并】【堆】【并查集】

    题目分析: 好像跑得很快,似乎我是第一个启发式合并的. 把玩具看成区间.首先很显然如果有两个玩具的进出时间有$l1<l2<r1<r2$的关系,那么这两个玩具一定在不同的栈中间. 现在 ...

  8. [JOI2017春季合宿]Port Facility[set、二分图]

    题意 你有两个栈,有 \(n\) 个货物,每个货物有一个进栈时间和出栈时间(所有时间的并集是1~2n),问有多少种不同的入栈方案. \(n\le 10^6\) 分析 把每个货物的存在看成区间,相交的区 ...

  9. UOJ #356. 【JOI2017春季合宿】Port Facility

    Description 小M有两个本质不同的栈. 无聊的小M找来了n个玩具.之后小M把这n个玩具随机顺序加入某一个栈或把他们弹出. 现在小M告诉你每个玩具的入栈和出栈时间,现在她想考考小S,有多少种方 ...

随机推荐

  1. Winform自定义键盘控件开发及使用

    最近有学员提出项目中要使用键盘控件,系统自带的osk.exe不好用,于是就有了下面的内容: 首先是进行自定义键盘控件的开发,其实核心大家都知道,就是利用SendKeys.Send发送相应 的字符,但是 ...

  2. java面试1

    1.面向对象的特征·有·哪些方面 1)抽象 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽 ...

  3. SAP日志表CDHDR 和

    1. 标准日志表CDHDR 和 CDPOS OBJECTCLAS = 'INFOSATZ' 信息记录 OBJECTCLAS = 'BANF' 采购申请 OBJECTCLAS = 'EINKBELEG' ...

  4. springboot 自动装配

    以下内容部分来自小马哥的 <springboot 编程思想> 基础 springboot 项目 maven 依赖 <dependency> <groupId>org ...

  5. jQuery EasyUI中DataGird动态生成列的方法

    EasyUI中使用DataGird显示数据列表中,有时需要根据需要显示不同的列,例如,在权限管理中,不同的用户登录后只能查看自己权限范围内的列表字段,这就需要DataGird动态组合列,下面介绍Eas ...

  6. 7.Hibernate查询

    一:Hibernate可以使用的查询语言 1.NativeSQL:本地语言(数据库自己的SQL语句) 2.HQL:hibernate自带的查询语句,可以使用HQL语言,转换成具体的方言 3.EJBQL ...

  7. fastadmin 中的日期时间,日期时间范围范围插件和key-value插件

    //A/a代表字段名<div class="form-group"> <label class="control-label col-xs-12 col ...

  8. 4、linux目录结构

    一.目录结构 /: 所有linux操作系统的顶点目录,不像windows,每个分区都有一个顶点目录 /boot 存放系统启动时相关的文件,比如kernel内核,grub引导菜单.(不要删除.) /bi ...

  9. Bridge的数据在内核处理流程

    转:http://blog.sina.com.cn/s/blog_67cc0c8f0101oh33.html 转载一篇Bridge的数据在内核处理流程,文章写的不错啊! (2013-07-05 16: ...

  10. ANSIBLE自动化管理工具

    ansible 基础 自动化运维工具 官网:https://www.ansible.com/ 官方文档:https://docs.ansible.com/ ansible 特性 1. 模块化:调用特定 ...