先部分分,再进阶
先认清任务,再讨论算法
2022 CSP-J 第二轮 T4|上升点列
一、完整题目
题目名称:P8816 [CSP-J 2022] 上升点列(point)
源程序文件:
输入文件:
时间限制:1 秒 内存限制:512 MiB
测试点:20 个等分点,每点 5 分
源程序文件:
point.cpp输入文件:
point.in 输出文件:point.out时间限制:1 秒 内存限制:512 MiB
测试点:20 个等分点,每点 5 分
题目描述
在二维平面上,一个点列 (x₁,y₁),(x₂,y₂),…,(xₘ,yₘ) 被称为上升点列,当且仅当对每个 1≤i<m,都有:
xᵢ≤xᵢ₊₁,yᵢ≤yᵢ₊₁,且 (xᵢ₊₁−xᵢ)+(yᵢ₊₁−yᵢ)=1
也就是说,从点列中的一个点走到下一个点时,只能向右走一个单位或向上走一个单位。
现在给定平面上的 n 个互不相同的整点。你还可以在平面上任意添加 k 个整点。请从给定点和新增点中选出尽可能多的点,并按合适顺序组成一个上升点列,求这个点列的最大长度。
输入格式
从文件 point.in 中读入数据。
第一行包含两个正整数 n,k,分别表示原有点的数量和可以新增的点数。
接下来 n 行,每行包含两个正整数 xᵢ,yᵢ,表示一个给定点。所有给定点互不相同。
输出格式
输出到文件 point.out 中。
输出一行一个整数,表示能够得到的上升点列的最大长度。
样例 1
8 2
3 1
3 2
3 3
3 6
1 2
2 2
5 5
5 3
8
例如可以在 (4,3) 和 (5,4) 处补点,把更多原有点连接进同一条上升点列,最终长度为 8。
样例 2
4 100
10 10
15 25
20 20
30 30
103
数据范围与测试点
所有数据保证 1≤n≤500,0≤k≤100,1≤xᵢ,yᵢ≤10^9,给定点两两不同。
| 测试点 | n |
k |
坐标范围 |
|---|---|---|---|
| 1~2 | ≤10 |
=0 |
≤10 |
| 3~4 | ≤10 |
≤100 |
≤100 |
| 5~7 | ≤500 |
=0 |
≤100 |
| 8~10 | ≤500 |
=0 |
≤10^9 |
| 11~15 | ≤500 |
≤100 |
≤100 |
| 16~20 | ≤500 |
≤100 |
≤10^9 |
按测试点取并集,不把重叠分数相加
勾选已掌握的路线,观察它们共同覆盖哪些测试点。这里计算的是该卷条件下的理论覆盖分,不代表程序已经通过正式评测,也不对应任何一等奖分数线。
已掌握的解法
去重后覆盖0 / 100
实际提交时,须将已掌握的分支整合到同一份程序。勾选路线不会自动拼接代码。
测试点覆盖图
已覆盖未覆盖
查看原题评分依据
逐条看懂:性质、推导与完整代码
选择一条路线,查看它为什么成立,再进入同一算法的可视化与代码追踪。
选择得分路线
算法过程执行语句与图示同步
当前变量金色表示与上一步相比发生变化
已输出
尚未输出
0 / 0
键盘 ← → 单步,空格播放 / 暂停
执行记录(最近 8 步)
用边界检查:我真的读懂了吗?
先手算,再展开解释。带入演示时会核对当前路线的适用条件。