1044 拦截导弹——http://codevs.cn/problem/1044/
第一部分:题目
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数)
输出这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
389 207 155 300 299 170 158 65
6
2
导弹的高度<=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/相关推荐
- CodeVS 1044 拦截导弹(DP)
题目大意: http://codevs.cn/problem/1044/ 第一问题就是求序列的最长递减数列的长度,第二问就是求数列的最长递增序列的长度. 代码: #include <iostre ...
- codevs——1044 拦截导弹(序列DP)
1999年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 某国为了防御敌国的导弹袭击,发展出一种 ...
- bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞
没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...
- 动态规划之——又见拦截导弹(nyoj814)
问题描述: 又见拦截导弹 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 大家对拦截导弹那个题目应该比较熟悉了,我再叙述一下题意:某国为了防御敌国的导弹袭击,新研制出来一 ...
- 动态规划之——拦截导弹(nyoj79)
问题描述: 拦截导弹 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮 ...
- 信息学奥赛一本通(1260:【例9.4】拦截导弹(Noip1999))
1260:[例9.4]拦截导弹(Noip1999) 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 15078 通过数: 5806 [题目描述] 某国为了防 ...
- 信息学奥赛一本通(1322:【例6.4】拦截导弹问题(Noip1999))
1322:[例6.4]拦截导弹问题(Noip1999) 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 14462 通过数: 5606 [题目描述] 某国为 ...
- BZOJ 2244: [SDOI2011]拦截导弹 DP+CDQ分治
2244: [SDOI2011]拦截导弹 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截 ...
- BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化)
BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化) 1 #include<algorithm> 2 #include<iostream> 3 #include ...
最新文章
- python填写excel-Python向excel中写入数据的方法
- MATLAB中cif用于清除什么,cifti-matlab-master 能够对MRI数据进行功能成像 - 下载 - 搜珍网...
- VSCode从下载到配置Ubuntu系统
- linux php oauth安装,php – 无法在Linux上安装OAuth
- 韩顺平php视频笔记44 php小练习表单提交
- 万圣节海报素材PSD分层模板
- 流程图函数’怎么画_程序员必备画图技能之——流程图
- 【老生谈算法】基于matlab时域频域处理的语音信号变声处理系统设计与算法原理(论文+程序源码+GUI图形用户界面)——变声算法
- lisp代码合并_CAD 同名文件合并(不开图)
- Sqlserver 高级篇 非聚集索引原理
- Emulex着眼数据中心LAN与SAN的聚合
- css3图标 对号,添加删除,箭头,关闭
- 云有约 | 首攻RSA,天空卫士“秀肌肉”怎么样了?
- Redis_数据类型(常用)
- Linux中find命令基本使用方法
- 2021B站1024程序员节 网络攻防CTF
- 嵌入式系统主要应用于哪些行业中?
- 【精读】1234- 上帝视角来看 2022 年前端趋势
- 没有几十年功力,写不出这一行“看似无用”的代码!!
- 盘点IT业年度十大关键词:2009年在偷菜中溜走
热门文章
- webstorm怎么跑项目_快讯!明年厦门中考体育项目定了!初三家长抽的!其他地市抽到啥?...
- SpringData JPA条件查询、排序、分页查询
- java swing 弹出登录框_用JavaSwing制作一个简单的登录框
- linux怎么删除端口转发,linux使用rinetd快速实现端口转发
- 阿里云性能测试服务 PTS 新面貌 - 压测协议、施压能力全新升级
- 读懂这一篇,集群节点不下线
- php阿里的同步工具canal,基于阿里的Canal实现数据同步
- Mybatis-增删改查模糊查询分页注解(普通类型参数、引用类型参数、Map类型参数)
- dedecms怎么改php版本_Linux下如何安装DedeCMS?
- 员工工号怎么编码_华为员工感慨:工号就留在这了,感谢公司给我自己写墓志铭的机会...