题意, 长度为n的序列, a1,a2, ...,ai, ..., an,  求最长严格上升子序列长度,与最长下降非严格自序列长度.

解法:     首先不得不吐嘈下题目的读入,恶心指数上达5颗星.

  对于一套拦截系统最多能拦截多少导弹, 求个非严格下降子序列就可以了.就不废话了. 主要还是求最少拦截数量.

  有一个结论, 最少拦截系统数量为 严格上升子序列.  思路如下:

    假定一个最长上升子序列形式如:    ...a_i ... aj  ...

    对于  a_i 与 a_j 之间的数 x 只可能有两类,  x <= a_i , 则可以 将这些导弹划分到 a_i拦截系统, x >= aj, 则可以将这些导弹划分到 a_j拦截系统.

其它区间类似.   其中还有如下情况,    b_1, b_2, <= a_i,  但是  b_1 > b_2,  那么b_1,b_2必定不能归结于一个拦截系统, 但是必定可以被 a_i之前的系统拦截.

  O(N^2) 代码实现,

     令 g( i ), 表示前i个导弹, 取第i个的最大长度.

       dp(i), 表示前i个导弹, 最长上升子序列长度.

      g(i) = max( 1, g(j) )   a_i > a_j

      dp(i) = max( dp(i-1), g(i) )

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;const int N = 101000;int g[N], dp[N], n, a[N];int main(){n = 0;
//    scanf("%d", &n);
//    for(int i = 0; i < n; i++) scanf("%d", a+i );    while( scanf("%d",&a[n] ) != EOF ) n++;dp[0] = 0;    for(int i = 1; i <= n; i++){g[i] = 1;for(int j = i-1; j >= 1; j-- )if( a[i-1] <= a[j-1] ) g[i] = max( g[i], g[j]+1 );dp[i] = max( dp[i-1], g[i] ); }printf("%d\n", dp[n] );dp[0] = 0;for(int i = 1; i <= n; i++){g[i] = 1;for(int j = i-1; j >= 1; j-- )if( a[i-1] > a[j-1] ) g[i] = max( g[i], g[j]+1 );dp[i] = max( dp[i-1], g[i] );}printf("%d\n", dp[n] );    return 0;
}

View Code

  O(NlogN)的写法,前面写过的题目里头有, 就懒得贴了.

转载于:https://www.cnblogs.com/yefeng1627/archive/2013/05/13/3076890.html

拦截导弹 最长上升/下降子序列相关推荐

  1. SUST OJ 1674: 入侵与反击(最长不下降子序列)

    1674: 入侵与反击 时间限制: 1 Sec  内存限制: 128 MB 提交: 229  解决: 28 [提交][状态][讨论版] 题目描述 A国部署的反导系统遇到了一个致命BUG,那就是每一次发 ...

  2. 最长不下降子序列O(NlogN) 输出序列

    文章目录 不输出序列的思路 输出序列 代码 例题:导弹拦截 不输出序列的思路 我们对于O(n2)O(n^2)O(n2)的最长不下降子序列十分熟悉了. #include <bits/stdc++. ...

  3. Vijous系列(1)LIS 最长不下降子序列的应用

    1.P1028魔族密码 :https://vijos.org/p/1028 分析:最长不下降子序列的变形, 把数字类比成前缀问题 #include <cstdio> #include &l ...

  4. 最长不下降子序列(推广问题)

    最长不下降子序列问题的定义:在一个序列中,找到一个最长的子序列,其中这个序列是非递减的 我们可以把这个非递减推广,其实非递减就是一种顺序,那么我们可以把定义推广到:给出一个顺序序列.目标序列中,在目标 ...

  5. 最大流 ---- 最大不相交路径数 ---- P2766 最长不下降子序列问题(网络流24题)

    题目链接 最多不相交路径 这种问题变化比较多,但都能表示成以下形式: 已知一些路径,每个节点只能属于一条路径,求能选择多少条路径使它们不相交. 主要的方法是拆点,将一个点拆成两个,然后连边,容量表示该 ...

  6. 最长不下降子序列java代码_浅谈最长不下降子序列与最长上升子序列

    唔,最长不下降子序列与最长上升子序列曾是困扰蒟蒻多时的一个问题,应该也有一些人分不清这2个的求法吧. 首先n^2算法肯定是都能分清的,因为不下降和上升的区别是连续的2个能不能相等,只需要在判断的时候判 ...

  7. 【P2766】 最长不下降子序列问题

    题目描述 «问题描述: 给定正整数序列x1,...,xn . (1)计算其最长不下降子序列的长度s. (2)计算从给定的序列中最多可取出多少个长度为s的不下降子序列. (3)如果允许在取出的序列中多次 ...

  8. 最长不下降子序列的O(n^2)算法和O(nlogn)算法

    转帖 最长不下降子序列的O(n^2)算法和O(nlogn)算法 最长不下降子序列(LIS:Longest Increasing Subsequence) //用句通俗的话说,我讲的很通俗易懂~~ 问题 ...

  9. 洛谷2766:[网络流24题]最长不下降子序列问题——题解

    https://www.luogu.org/problemnew/show/P2766 给定正整数序列x1,...,xn . (1)计算其最长不下降子序列的长度s. (2)计算从给定的序列中最多可取出 ...

最新文章

  1. 比较ArrayList、LinkedList、Vector
  2. delegate委托
  3. 算法学习:后缀数组 height的求取
  4. UITextView实现PlaceHolder的方式
  5. Google MapReduce到底解决什么问题?
  6. VC内存泄露检查工具:Visual Leak Detector
  7. 为了搞清楚CDN的原理,我头都秃了...
  8. 常用技巧 —— 离散化
  9. 数据清洗工具OpenRefine
  10. pandas拉长dataframe
  11. an existing tansporter instance is currently uploading this package 解决方法
  12. 微信小程序云开发教程-WXML入门-列表渲染
  13. 阅读笔记《全景探秘游戏设计艺术》
  14. 嵌入式Linux用java_嵌入式linux 开发步骤详细解析(Hello Embedded World)
  15. 计算机键盘优点,市面上的笔记本键盘优缺点解析,看完秒懂!
  16. java printout_word中printout函数的相关参数介绍 | 学步园
  17. 面试问反射 你能跟面试官聊多少呢
  18. 阿里技术专家花3年写的《MySQL笔记》解决了70%数据库面试难题,网友:非常棒!
  19. 第六章第三十四题(打印日历)(Print calendar) - 编程练习题答案
  20. 负数在计算机中表示方法

热门文章

  1. 既可输入又可选择的组件
  2. 清华大学郑莉c++答疑
  3. 行业研究报告基本分析思路updated with 5c model
  4. foundation of the academics
  5. formal method online checking tool
  6. 人,最终可能还是平静的干事情,这是最终的奥义
  7. C# lambda表达式及初始化器
  8. windows 2008 enterprise tcpip.sys问题总结。
  9. 人工智能与机器学习有哪些不同
  10. 2016.01.05 论文参考文献