第一部分:题目

题目描述 Description

某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。

输入描述 Input Description

输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数)

输出描述 Output Description

输出这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

样例输入 Sample Input

389 207 155 300 299 170 158 65

样例输出 Sample Output

6

2

数据范围及提示 Data Size & Hint

导弹的高度<=30000,导弹个数<=20

第二部分:思路

需要解决两个问题:1,一套系统最多拦截多少导弹?2,要拦截所有导弹最少需要多少系统?

问题1:动态规划:主要是确定拦截哪些导弹。也就是求数列中的最长递减序列。从最后一个数开始,统计以每个数为首的递减序列的长度,取最长的即可。

问题2:贪心:就是尽可能每次拦截最多导弹。可以看出就是每次把问题1的结果即最长序列中的导弹全拦截了,直到所有导弹都被拦截为止。这里怎么表示导弹被拦截了呢:把被拦截的导弹的递减序列长度置为0即可。然后需要从新进行递减序列长度计算。

第三部分:代码

#include<stdio.h>
int s[20][2],len=0;//存储导弹高度及以其为首的最长递减序列长度
int acount()//计算递减序列长度并返回最大值
{int Max=0,j,i;for(i=len-2;i>=0;i--)//从最后一个数开始计算
    {int max=0;for(j=i+1;j<len;j++){//注意:s[j][1]该值为0表示导弹被拦截了,就pass。 if(s[j][1]>0&&s[i][0]>s[j][0]&&max<s[j][1]) {max=s[j][1];}}if(s[i][1]>0){s[i][1]=max+1;}if(Max<s[i][1])//寻找最大值
        {Max=s[i][1];}}return Max;
}
int main()
{int height;while(scanf("%d",&height)!=EOF){s[len][0]=height;s[len++][1]=1;//初始化每个导弹的最长递减序列长度为1
    }int i,j;int Max=acount();//第一次系统能够拦截导弹最大值 int max=acount();//每次能够拦截最大值 int count=0;//统计需要至少多少系统 while(max>0)//当前有导弹未被拦截就进行拦截操作
    {count++;//每次拦截的都是拦截最多导弹:可以想象,依次拦截的导弹的序列长度//是递减的。 for(i=0;i<len;i++){if(s[i][1]==max&&max>0){s[i][1]=0;max--;}if(max==0)//当前拦截结束
            {break;}}max=acount();//需要重新计算序列长度以及当前剩下所有导弹的最长递减序列
    }printf("%d\n%d\n",Max,count);return 0;
} 

转载于:https://www.cnblogs.com/xiangguoguo/p/5386544.html

1044 拦截导弹——http://codevs.cn/problem/1044/相关推荐

  1. CodeVS 1044 拦截导弹(DP)

    题目大意: http://codevs.cn/problem/1044/ 第一问题就是求序列的最长递减数列的长度,第二问就是求数列的最长递增序列的长度. 代码: #include <iostre ...

  2. codevs——1044 拦截导弹(序列DP)

    1999年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解 题目描述 Description 某国为了防御敌国的导弹袭击,发展出一种 ...

  3. bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞

    没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...

  4. 动态规划之——又见拦截导弹(nyoj814)

    问题描述: 又见拦截导弹 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 大家对拦截导弹那个题目应该比较熟悉了,我再叙述一下题意:某国为了防御敌国的导弹袭击,新研制出来一 ...

  5. 动态规划之——拦截导弹(nyoj79)

    问题描述: 拦截导弹 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮 ...

  6. 信息学奥赛一本通(1260:【例9.4】拦截导弹(Noip1999))

    1260:[例9.4]拦截导弹(Noip1999) 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 15078     通过数: 5806 [题目描述] 某国为了防 ...

  7. 信息学奥赛一本通(1322:【例6.4】拦截导弹问题(Noip1999))

    1322:[例6.4]拦截导弹问题(Noip1999) 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 14462     通过数: 5606 [题目描述] 某国为 ...

  8. BZOJ 2244: [SDOI2011]拦截导弹 DP+CDQ分治

    2244: [SDOI2011]拦截导弹 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截 ...

  9. BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化)

    BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化) 1 #include<algorithm> 2 #include<iostream> 3 #include ...

最新文章

  1. python填写excel-Python向excel中写入数据的方法
  2. MATLAB中cif用于清除什么,cifti-matlab-master 能够对MRI数据进行功能成像 - 下载 - 搜珍网...
  3. VSCode从下载到配置Ubuntu系统
  4. linux php oauth安装,php – 无法在Linux上安装OAuth
  5. 韩顺平php视频笔记44 php小练习表单提交
  6. 万圣节海报素材PSD分层模板
  7. 流程图函数’怎么画_程序员必备画图技能之——流程图
  8. 【老生谈算法】基于matlab时域频域处理的语音信号变声处理系统设计与算法原理(论文+程序源码+GUI图形用户界面)——变声算法
  9. lisp代码合并_CAD 同名文件合并(不开图)
  10. Sqlserver 高级篇 非聚集索引原理
  11. Emulex着眼数据中心LAN与SAN的聚合
  12. css3图标 对号,添加删除,箭头,关闭
  13. 云有约 | 首攻RSA,天空卫士“秀肌肉”怎么样了?
  14. Redis_数据类型(常用)
  15. Linux中find命令基本使用方法
  16. 2021B站1024程序员节 网络攻防CTF
  17. 嵌入式系统主要应用于哪些行业中?
  18. 【精读】1234- 上帝视角来看 2022 年前端趋势
  19. 没有几十年功力,写不出这一行“看似无用”的代码!!
  20. 盘点IT业年度十大关键词:2009年在偷菜中溜走

热门文章

  1. webstorm怎么跑项目_快讯!明年厦门中考体育项目定了!初三家长抽的!其他地市抽到啥?...
  2. SpringData JPA条件查询、排序、分页查询
  3. java swing 弹出登录框_用JavaSwing制作一个简单的登录框
  4. linux怎么删除端口转发,linux使用rinetd快速实现端口转发
  5. 阿里云性能测试服务 PTS 新面貌 - 压测协议、施压能力全新升级
  6. 读懂这一篇,集群节点不下线
  7. php阿里的同步工具canal,基于阿里的Canal实现数据同步
  8. Mybatis-增删改查模糊查询分页注解(普通类型参数、引用类型参数、Map类型参数)
  9. dedecms怎么改php版本_Linux下如何安装DedeCMS?
  10. 员工工号怎么编码_华为员工感慨:工号就留在这了,感谢公司给我自己写墓志铭的机会...