AC Wing 1010 拦截导弹

某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。

但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。

某天,雷达捕捉到敌国的导弹来袭。

由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。

输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,导弹数不超过1000),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

输入格式
共一行,输入导弹依次飞来的高度。

输出格式
第一行包含一个整数,表示最多能拦截的导弹数。

第二行包含一个整数,表示要拦截所有导弹最少要配备的系统数。

数据范围
雷达给出的高度数据是不大于 30000 的正整数,导弹数不超过 1000。

输入样例:
389 207 155 300 299 170 158 65
输出样例:
6
2

核心思想:第一个答案是最长不下降子序列,比较基础
第二个答案是最长上升子序列

这个是基于贪心的思想,贪心得出一堆子序列,最优解也有一堆子序列
只要证明贪心得出的子序列个数与最优解表示的子序列个数一样就行了,证明方式就是A >= B , A <= B,就可以得出 A == B , 显然A >= B , 因为最优解的子序列数量一定是最少的,现在只需要证明A <= B,那么该怎么证明呢?,首先,他两个如果不一样的话必定会有不一样的子序列,这对子序列必定会有第一个不相等的数,咱们贪心的策略就是把他接在现有的子序列结尾最小值的后面,所以现在最优解的这个位置的数一定比他大,所以就可以替换掉,所以子序列的个数是不变的,所以又证明了A >= B,所以A == B,现在当务之急就是怎么用代码实现这个贪心的策略,就只需要维护各个子序列的结尾就行了,对于每一个数无非就两种操作,一种是排在某个序列之后,一种是另外再开辟一个序列,而且由于贪心策略的第二条咱们维护的各个子序列的结尾是单调上升的,用这个序列能将所有导弹全部拦截下来,求最小值的话那么就是求最短上升子序列的个数了啦!

#include<iostream>
using namespace std;
const int N = 1010;
int f1[N],f[N],a[N];int main(){int n = 1,res1 = 0;while(~scanf("%d",&a[n])) n++;for(int i=1;i<n;i++){f1[i] = 1;for(int j=1;j<i;j++){if(a[i] <= a[j]) f1[i] = max(f1[i],f1[j] + 1);}res1= max(res1,f1[i]);}int res2 = 0;for(int i=1;i<n;i++){f1[i] = 1;for(int j=1;j<i;j++){if(a[i] > a[j]) f1[i] = max(f1[i],f1[j] + 1);}res2= max(res2,f1[i]);}cout<<res1<<"\n"<<res2<<endl;return 0;
}

拦截导弹(dp【最长上升子序列模型】 + 贪心)相关推荐

  1. 【HDU - 1025】Constructing Roads In JGShining's Kingdom(dp最长上升子序列模型 + 二分优化)

    题干: Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit ...

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

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

  3. 最长上升子序列模型 AcWing 1010. 拦截导弹

    最长上升子序列模型 AcWing 1010. 拦截导弹 原题链接 AcWing 1010. 拦截导弹 算法标签 DP 线性DP 最长上升子序列 思路 摘自该题解 代码 #include<bits ...

  4. C++---最长上升子序列模型---导弹防御系统(每日一道算法2023.3.5)

    注意事项: 本题的dp:"线性dp-最长上升子序列的长度" 本题的贪心(单调队列):"最长上升子序列模型-拦截导弹" 下面思路只讲如何运用这些东西来解这道题 强 ...

  5. 【动态规划专题】最长上升子序列模型

    题目 算法 A.AcWing 895. 最长上升子序列 模板 B.AcWing1017. 怪盗基德的滑翔翼 最长上升子序列/最长下降子序列 C.AcWing 1014. 登山 最长上升子序列/最长下降 ...

  6. [AcWing] 1012. 友好城市(C++实现)最长上升子序列模型、较为特殊

    [AcWing] 1012. 友好城市(C++实现)最长上升子序列模型 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总 ...

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

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

  8. ACwing 895 - 最长上升子序列(最长上升子序列模型)

    给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少. 输入格式 第一行包含整数N. 第二行包含N个整数,表示完整序列. 输出格式 输出一个整数,表示最大长度. 数据范围 1 ≤ N ≤ ...

  9. Codeforces Round #620 (Div. 2)(D. Shortest and Longest LIS)(O(n log n)的最长上升子序列或者贪心)

    Codeforces Round #620 (Div. 2)(D. Shortest and Longest LIS)(O(n log n)的最长上升子序列或者贪心) time limit per t ...

最新文章

  1. java面向对象特征及阐述,Java面向对象四个特征
  2. java 事务处理 是不是aop思想_理解原生JAVA AOP思想
  3. 动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有
  4. 《巫师 3:狂猎》:传统叙事在开放世界中的水土不服
  5. 【STM32】GPIO模拟I2C程序示例
  6. 洛谷 - P4717 【模板】快速莫比乌斯/沃尔什变换 (FMT/FWT)
  7. 多重信号辅助音频分离,让你在嘈杂环境也能指哪听哪儿
  8. java eclipse oxygen_Eclipse Java Oxygen配置Tomcat
  9. How to get Intellisense for Web.config and App.config in Visual Studio .NET?(转载)
  10. 365赚钱养猫小程序
  11. 【kafka】kafka 如何 删除 清除 消费组 信息
  12. vue 为什么要销毁第三方实例_Web前端工程师面试之Vue问题汇总解析
  13. linux 终端 拼音,告诉你Ubuntu中文智能拼音输入法配置的方法及命令
  14. 从0开始学习WBE前端
  15. 网页地址栏?和的意义
  16. 联想小新air pro 13的 win10和ubuntu17.10双系统安装,彻底解决找不到磁盘问题。
  17. Silvaco TCAD仿真学习Lesson2——Athena仿真
  18. 新车磨合应该从正确启动发动机开始
  19. 全国计算机三级答案,全国计算机三级数据库技术笔试试题(附正确答案)
  20. 【Nape教程】Nape刚体碰撞检测

热门文章

  1. 我比较喜欢宫崎骏的动画风格,推荐5部类似的风格的动画
  2. 试用期,没转正,被辞退,不给赔偿 ?
  3. 【开源】基于飞桨PaddleClas构建个人PC智慧相册
  4. 微机原理三大内部寄存器,详细分类
  5. LC串联和并联电路汇总(转)
  6. k8s整合Traefik
  7. 计算机一级考试题 百度云盘,【一级建造师历年真题网盘_2021年一级建造师历年试题】- 环球网校...
  8. 美国计算机麻省理工学院,美国计算机四强---麻省理工学院
  9. java字符串根据分隔符取值_java中解析含分隔符的字符串
  10. 【论文简述及翻译】GWCNet:Group-wise Correlation Stereo Network(CVPR 2019)