首页 > 试题广场 >

拦截导弹

[编程题]拦截导弹
  • 热度指数:6458 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于1000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

数据范围:导弹个数 n 满足 ,导弹的高度 m 满足

输入描述:
第一行输入一个正整数 n ,表示导弹的个数
第二行输入 n 个正整数,表示导弹的高度


输出描述:
输出一套拦截系统最多拦截多少导弹和最少要配备多少套导弹拦截系统两个正整数
示例1

输入

8
389 207 155 300 299 170 158 65

输出

6
2
n = int(input())
arr = list(map(int, input().split()))
dp=[1 for _ in range(n)]
dp2=[1 for _ in range(n)]
for i in range(1,n):
    for j in range(0,i):
        if arr[i]<=arr[j]:
            dp[i]=max(dp[j]+1,dp[i])
        else:
            dp2[i]=max(dp2[j]+1,dp2[i])
print(max(dp))
print(max(dp2))

发表于 2025-05-08 18:00:45 回复(0)

问题信息

难度:
1条回答 1709浏览

热门推荐

通过挑战的用户

查看代码
拦截导弹