#lydlx02x0911. 导弹防御系统 Missile Defence System
导弹防御系统 Missile Defence System
导弹防御系统
题目描述
为了对抗附近恶意国家的威胁,R 国更新了他们的导弹防御系统。
防御系统特性
一套防御系统的导弹拦截高度要么一直严格单调上升,要么一直严格单调下降。
例如:
- 如果一套系统先后拦截了高度为 3 和高度为 4 的两发导弹,那么接下来该系统就只能拦截高度大于 4 的导弹。
- 如果一套系统先后拦截了高度为 5 和高度为 2 的两发导弹,那么接下来该系统就只能拦截高度小于 2 的导弹。
问题
给定即将袭来的一系列导弹的高度,请你求出至少需要多少套防御系统,就可以将它们全部击落。
输入格式
输入包含多组测试用例。
对于每个测试用例:
- 第一行包含整数 n,表示来袭导弹数量
- 第二行包含 n 个不同的整数,表示每个导弹的高度
- 当输入测试用例 n=0 时,表示输入终止,且该用例无需处理
输出格式
对于每个测试用例,输出一个占据一行的整数,表示所需的防御系统数量。
数据范围
输入样例
5
3 5 2 4 1
0
输出样例
2
样例解释
来袭导弹高度:[3, 5, 2, 4, 1]
最少需要两套防御系统:
-
第一套系统:采用上升序列,拦截高度为
3, 4的导弹- 先拦截高度 3
- 然后拦截高度 4(4 > 3,满足严格单调上升)
-
第二套系统:采用下降序列,拦截高度为
5, 2, 1的导弹- 先拦截高度 5
- 然后拦截高度 2(2 < 5,满足严格单调下降)
- 最后拦截高度 1(1 < 2,满足严格单调下降)
这样,所有 5 发导弹都被击落,共使用 2 套防御系统。
关键点
- 导弹高度各不相同:题目明确说明 n 个不同的整数
- 系统类型选择自由:对于每套防御系统,我们可以自由选择让它采用上升序列还是下降序列
- 拦截顺序固定:导弹来袭顺序是固定的,必须按输入顺序拦截
- 最少系统数量:目标是使用尽可能少的防御系统拦截所有导弹
- 系统独立工作:每个系统独立拦截导弹,互不干扰
问题等价转换
这个问题等价于:
- 将给定的导弹序列划分为若干个子序列
- 每个子序列要么是严格单调递增的,要么是严格单调递减的
- 求最少需要多少个子序列
这是一个导弹拦截系统的扩展问题,普通导弹拦截问题只能使用单调下降序列,而此题允许选择单调上升或单调下降。
时空限制
- 时间限制:1秒
- 空间限制:64MB