题目

拦截导弹

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

389 207 155 300 299 170 158 65

输出----这套系统最多能拦截的导弹数和拦截所有导弹所需最少的拦截系统数

6
2

算法分析

**问题抽象:**求最多可以拦截的导弹数,就是求最长递减字串长度,这个很好理解
求最少的系统数,就是求最长非递减字串的长度,可以这样理解,假设最长的非递减字串长度为n, 那么以这最长的非递减字串的每个字符为分界点,可以将整个串分成n个小递减的小字串,这样每一发炮弹都可以拦截对应的小字串,倘若最长的非递减字串长大于n, 那么势必会有一个小字串不是递减的,则这个字串就要用不止一发子弹才能打下。

算法: 以最长递减字串为例,就是求以每个字符结尾字串中最长的,以字符i结尾的字符串可以这样表示
这里j<i
利用动态规划自低向下的从0一直到n-1进行上述操作,最后在找出dp[i]最大的就行。

代码

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
#define N 9999
int down[N];//down[i]表示以i+1个字符结尾的最长递减子序列
int up[N];//up[i]表示以i+1个字符结尾的最长非递减子序列
int h[N];//表示高度
int n=0;int main(){while(cin>>h[n++]);n--;for(int i;i<n;i++)down[i]=up[i]=1;//最坏情况下自身也是一个串for(int i=0;i<n;i++){for(int j=0;j<i;j++){if(h[i]<h[j])down[i]=max(down[i],down[j]+1);elseup[i]=max(up[i],up[j]+1);}}int maxd=0,maxu=0;for(int i=0;i<n;i++){maxd=max(maxd,down[i]);maxu=max(maxu,up[i]);}cout<<maxd<<endl<<maxu<<endl;return 0;
}

时间复杂度

O(n2)

详解拦截导弹问题(动态规划)相关推荐

  1. 蓝桥杯算法训练 拦截导弹(动态规划 C语言)

    问题描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

  2. 详解拦截器和过滤器的区别

    拦截器和过滤器的区别 过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对acti ...

  3. 动态规划设计方法详解最长递增子序列

    很多读者反应,就算看了前文动态规划详解,了解了动态规划的套路,也不会写状态转移方程,没有思路,怎么办?本文就借助「最长递增子序列」来讲一种设计动态规划的通用技巧:数学归纳思想. 最长递增子序列(Lon ...

  4. Struts2使用Interceptor实现权限控制的应用实例详解

    Struts2使用Interceptor实现权限控制的应用实例详解 拦截器:是Struts2框架的核心,重点之重.因此,对于我们要向彻底学好Struts2.0.读源码和使用拦截器是必不可少的.少说了. ...

  5. Servlet与jsp详解

    Servlet与jsp详解 一.Servert 概念:运行在服务器端的小程序 1.servlet就是一个接口,定义了java类被浏览器访问到的规则 2.将来我们自定义一个类,实现该接口,复写方法 快速 ...

  6. 清橙 A1120 拦截导弹 -- 动态规划(最长上升子序列)

    题目地址:http://oj.tsinsen.com/A1120 问题描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但 ...

  7. 从背包问题优化详解动态规划思想

    动态规划: 所有的数据结构与算法的理解必须建立在题目的练习上,否则看多少理论都没有实际用处!!! 所以下面这些理论文字看不懂通通没关系,跟随下面的背包问题还会跟深入的理解. 一.基本概念:任何数学递推 ...

  8. 处理器拦截器(HandlerInterceptor)详解

    处理器拦截器(HandlerInterceptor)详解 编程界的小学生 关注 2017.04.06 15:19* 字数 881 阅读 657评论 0喜欢 4 简介 SpringWebMVC的处理器拦 ...

  9. 详解动态规划最长公共子序列--JavaScript实现

    前面两篇我们讲解了01背包问题和最少硬币找零问题.这篇将介绍另一个经典的动态规划问题--最长公共子序列.如果没看过前两篇,可点击下面链接. 详解动态规划最少硬币找零问题--JavaScript实现 详 ...

最新文章

  1. android 图片压缩方法分析
  2. 通过源码分析Android 的消息处理机制
  3. bzoj 3223: Tyvj 1729 文艺平衡树
  4. Linux下查看进程和线程
  5. sip gw功能包括_道哥漫谈:大话有趣的SIP通信
  6. 个人认为不错的句子(part2)--计算机是一种工具,但是如果没有绝对精确的指令,计算机也将一无是处
  7. 「LibreOJ Round #11」Misaka Network 与求和(杜教筛 + Min_25)
  8. error_reporting()的用法
  9. 设计一套基于NHibernate二级缓存的MongoDB组件(上)
  10. sql 删除依赖_关系数据库标准语言SQL(二)
  11. 解读 2018之Go语言篇(下):明年有哪些值得期待?
  12. Linux ubuntu 切换阿里更新源
  13. 定时任务@Scheduled(cron = “* * * * * *?“) 表达式详解
  14. URL和URI的区别及理解
  15. JavaScript设置背景图片
  16. oracle hot patch david,Hotpatch文件介绍
  17. 陈伟星“VVShare打车链”,打造区块链经济共享平台
  18. ACM赛后总结2018.09.23
  19. 在线答题刷题,创建题库智能组卷,更高效!
  20. mysql 一个月以前_mysql查询昨天 一周前 一月前 一年前的数据

热门文章

  1. 爱奇艺视频发布软件排名怎么样
  2. 亲们 ,paypal账户您们都是怎么提现结汇呢?
  3. Unity Shader屏幕特效基础OnRenderImage()函数
  4. KaiOS编译环境配置
  5. 2022-2028年中国数码相机行业市场行情动态及发展趋向分析报告
  6. VCode无法打开stdio.h等问题
  7. LWN:让vma的匿名页不再匿名!
  8. found 6 vulnerabilities (3 moderate, 3 high) run `npm audit fix` to fix them, or `npm audit` for d
  9. python中可选参数_正确使用Python可选参数
  10. 新的开始,一切从头开始