A94869.神秘的礼物
普及/提高-
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
Peter 决定给他住在澳大利亚的朋友写一张生日贺卡。为了让这份礼物显得更加神秘,他决定用一系列的信封制作一个“信封套娃链”。
这里的“链”是指一个信封序列 A={a1,a2,…,ak},其中第 i 个信封的宽度和高度必须严格大于第 i−1 个信封的宽度和高度。序列的长度即为链中信封的个数。
Peter 想要从他拥有的信封中选出一些,组成一个长度最大的链。同时,这个链必须能够装下他准备的卡片。卡片能装入链中的条件是:卡片的宽度和高度必须严格小于链中最小信封(即 a1)的宽度和高度。
注意: 信封和卡片都不能旋转。
Peter 有很多信封但时间紧迫,于是他把这个艰巨的任务交给了你。请你计算出满足条件的最长信封链的长度,并输出具体的信封编号序列。
输入格式
第一行包含三个整数 n,w,h (1≤n≤5000, 1≤w,h≤106),分别表示 Peter 拥有的信封数量、卡片的宽度和高度。
接下来的 n 行,每行包含两个整数 wi 和 hi (1≤wi,hi≤106),表示第 i 个信封的宽度和高度。
输出格式
第一行输出一个整数,表示最长信封链的长度。
第二行输出组成该链的信封编号(按从小到大的顺序,即从最里面的信封到最外面的信封),编号之间用空格分隔。
如果存在多个长度最大的方案,输出任意一个即可。
如果没有任何信封能装下卡片,则在第一行输出 0。
输入输出样例
输入#1
2 1 1 2 2 2 2
输出#1
1 1
输入#2
3 3 3 5 4 12 11 9 8
输出#2
3 1 3 2
说明/提示
【样例解释 1】
- 卡片尺寸:1×1。
- 信封 1:2×2。能装下卡片(2>1,2>1)。
- 信封 2:2×2。能装下卡片。
- 尝试建链:
- 如果我们选信封 1 作为第一层,信封 2 能套在信封 1 外面吗?不能。因为题目要求严格大于,而 2 不大于 2。
- 同理,信封 1 也不能套在信封 2 外面。
- 结论:最长链长度为 1。输出编号 1(或者 2)。
【样例解释 2】
- 卡片尺寸:3×3。
- 信封 1:5×4。能装下卡片。
- 信封 2:12×11。能装下卡片。
- 信封 3:9×8。能装下卡片。
- 最优链构造:
- 最内层:信封 1 (5×4)。
- 中间层:信封 3 (9×8)。因为 9>5 且 8>4,可以套在信封 1 外面。
- 最外层:信封 2 (12×11)。因为 12>9 且 11>8,可以套在信封 3 外面。
- 路径:卡片 → 1 → 3 → 2。
- 结果:长度为 3,顺序为
1 3 2。
【数据范围】
- 1≤n≤5000
- 1≤w,h,wi,hi≤106