问题 K: 【动态规划】拦截导弹

时间限制: 1 Sec  内存限制: 256 MB
提交: 39  解决: 10
[提交][状态][讨论版]

题目描述

张琪曼:“老师,修罗场是什么?”

墨老师:“修罗是佛家用语,修罗毕生以战斗为目标,修罗场指的是他们之间的死斗坑,人们通常用‘修罗场’来形容惨烈的战场。后来又引申出‘一个人在困境中做绝死奋斗’的意思。所以,这其实也在暗示我们,即使是身处绝境,也不要放弃奋斗。再说了,情况其实没有这么糟糕,因为我们最新的导弹拦截系统已经研制好了。”

魔法世界为了防御修罗王军团的导弹袭击,开发出一种导弹拦截系统──“要你命3000”。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到修罗王军团的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。

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

输入

一行,为导弹依次飞来的高度

输出

行,分别是最多能拦截的导弹数与要拦截所有导弹最少要配备的系统数

样例输入

389 207 155 300 299 170 158 65

样例输出

6
2 解题思路:题目所给的数据并不知道数量,所以添加一个字符,genchar()获取字符判断是不是空格,是空格说明后面还有数据,继续读入整数。
  
    char cc;
cin>>a[n++];
while((cc=getchar())==' '){
cin>>a[n++];
}

  本来我是用的cc=getchar()!=‘\n’,结果提交oj,显示超时,程序根本停不下。所以不知道一行的最后用什么结束的,但改成只要不等于空格就结束,就可以了。 

  最多能拦截的导弹数很容易明白,就是求最长非递增子序列。

  最少要配备的系统数,刚开始我以为只要后面一个数比前面一个数大,然后c++,最后得到的就是要配备的系统数呢。

  但7 8 9 2 1 3 4 5这几个数就不可以,得到的是5,但结果应该是4。  5虽然比4大,但是他可以被打掉9的导弹打掉。所以5就不用再计入了。

  后来百度一下,应该是求最长递增子序列才行。

  然后证明这个好像是什么dilworth定理(最少链划分 = 最长反链长度)。

  这个还不太懂,一会再看看。

  还有个理解的方法,这个序列可以挑出很多递增子序列来,找一个不是最长的,再看他后面可能还有一个比这个序列中大的一个数,这个数也要消耗一个导弹。所以得找最长递增子序列才能打掉所有导弹。

代码:
#include <iostream>
#include <cstdio> using namespace std; int main()
{
int n=;
int a[];
int sum[];
int sum2[];
int c=;//储存下一个高度比上一个高度大的情况数量
int maxx;
int maxx2;
int ans=;
int ans2=;
char cc;
cin>>a[n++];
while((cc=getchar())==' '){
cin>>a[n++];
}
sum[]=;
sum2[]=;
for(int i=;i<n;i++){
maxx=;
maxx2=;
for(int j=;j<i;j++){
if(a[j]>=a[i]){
maxx=max(maxx,sum[j]);
}
if(a[j]<a[i]){
maxx2=max(maxx2,sum2[j]);
}
}
sum[i]=maxx+;
ans=max(ans,sum[i]);
sum2[i]=maxx2+;
ans2=max(ans2,sum2[i]);
}
printf("%d\n%d",ans,ans2);
return ;
}
 

【动态规划】拦截导弹_dilworth定理_最长递增子序列的更多相关文章

  1. 九度OJ 1112:拦截导弹 (DP、最长下降子序列)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3124 解决:1525 题目描述: 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能 ...

  2. 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹

    一,    最长递增子序列问题的描述 设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1< ...

  3. hdu1257最少拦截系统 动态规划(最长递增子序列(LIS))

    Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高 ...

  4. 算法之动态规划(最长递增子序列——LIS)

    最长递增子序列是动态规划中最经典的问题之一,我们从讨论这个问题开始,循序渐进的了解动态规划的相关知识要点. 在一个已知的序列 {a1, a 2,...an}中,取出若干数组成新的序列{ai1, ai ...

  5. 动态规划之最长递增子序列(LIS)

           在一个已知的序列{ a1,a2,……am}中,取出若干数组成新的序列{ ai1, ai2,…… aim},其中下标 i1,i2, ……im保持递增,即新数列中的各个数之间依旧保持原数列中 ...

  6. HDU 1257 最少拦截系统 最长递增子序列

    HDU 1257 最少拦截系统 最长递增子序列 题意 这个题的意思是说给你\(n\)个数,让你找到他最长的并且递增的子序列\((LIS)\).这里和最长公共子序列一样\((LCS)\)一样,子序列只要 ...

  7. 动态规划 - 最长递增子序列(LIS)

    最长递增子序列是动态规划中经典的问题,详细如下: 在一个已知的序列{a1,a2,...,an}中,取出若干数组组成新的序列{ai1,ai2,...,aim},其中下标i1,i2,...,im保持递增, ...

  8. 【动态规划】【二分】【最长上升子序列】Vijos P1028 魔族密码

    题目链接: https://vijos.org/p/1028 题目大意: 给N个字符串(N<=2000),求能组成词链的单词最多有几个. 如果在一个由一个词或多个词组成的表中,除了最后一个以外, ...

  9. 【动态规划】【二分】【最长上升子序列】HDU 5773 The All-purpose Zero

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5773 题目大意: T组数据,n个数(n<=100000),求最长上升子序列长度(0可以替代任何 ...

随机推荐

  1. c语言的数学函数ceil、floor、round

    头文件<math.h> 函数原型和作用 double ceil(double x); 向上取整 double floor(double x); 向下取整 double round(doub ...

  2. 桂电在linux环境下使用出校器

    一.官方出校器(无界面) 由于学校官方最新的linux版出校器无效,我们只能使用老版本的出校器了. 但因为老版本的出校器是32位的,而现在主流使用的是64位系统,因此我们得安装32位库. 在ubunt ...

  3. jquery------隐式迭代

    其中Jq方法遍历内部dom数组的过程就叫做[隐式迭代] my.js $(document).ready(function(){ (function($){ $.fn.swapClass=functio ...

  4. spark-submit提示资源不足

    ensure that workers are registered and have sufficient resources spark-cluster启动的配置里配置了每个worker的内存,如 ...

  5. Logistic Regression and Gradient Descent

    Logistic Regression and Gradient Descent Logistic regression is an excellent tool to know for classi ...

  6. WinForm中动态添加控件 出现事件混乱,解决办法记录。

    还是在抢票软件中出的问题,我没点击一个联系人,要生成一排控件,其中有席别combobox这样的下拉框控件,会出现如下图所示的问题:问题描述:在代码中动态创建的控件,事件混乱了,一个控件触发了所有同类型 ...

  7. linux 查找php.ini 文件

    sudo find /* -name 'php.ini' /etc/php5/fpm/php.ini

  8. Dean Edwards大神写的addEvent库

    直接晒代码: // written by Dean Edwards, 2005 // with input from Tino Zijdel, Matthias Miller, Diego Perin ...

  9. 老项目的#iPhone6于iPhone6Plus适配#iPhone6分辨率与适配

    技术博客http://www.cnblogs.com/ChenYilong/    本文永久地址为http://www.cnblogs.com/ChenYilong/p/4011744.html ,转 ...

  10. Todd's Matlab讲义第2讲:Matlab 编程

    Matlab也可以编程,可存为以.m为后缀的文件,称为M文件.M文件有两种:函数和脚本. 函数程序 点击新建图标,在打开的窗口里输入如下内容: function y = myfunc (x) y = ...