zoukankan      html  css  js  c++  java
  • 3:拦截导弹

    题目链接:http://cxsjsxmooc.openjudge.cn/2017t2summerw5/3/

    总时间限制: 1000ms 内存限制: 65536kB
    描述
    某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹。拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹。
    输入
    输入有两行,
    第一行,输入雷达捕捉到的敌国导弹的数量k(k<=25),
    第二行,输入k个正整数,表示k枚导弹的高度,按来袭导弹的袭击时间顺序给出,以空格分隔。
    输出
    输出只有一行,包含一个整数,表示最多能拦截多少枚导弹。
    样例输入
    8
    300 207 155 300 299 170 158 65
    
    样例输出
    6
    
    来源
    医学部计算概论2006期末考试题

    算法分析:

    这个题目其实跟最长上升子序列问题类似,只是这里寻找的是最长不上升子序列的长度。

    假设用maxLen[k]表示以a[k]做为“终点”的最长不上升子序列的长度,那么:

    初始状态: maxLen [1] = 1
    maxLen[k]= max { maxLen [i]: 1<=i < k 且 a[i ]>= a[k]且 k≠1 } + 1
    若找不到这样的i,则maxLen[k] = 1 

    maxLen[k]的值,就是在a[k]左边,“终点”数值大于或等于a[k] ,且长度最大的那个不上升子序列的长度再加1。因为a[k]左边任何“终点”大于或等于a[k]的子序列,加上a[k]后就能形成一个更长的不上升子序列 。

     1 #include <stdio.h>
     2 #define maxN 5005
     3 int main(int argc, char *argv[])
     4 {
     5     int i,j;
     6     int n,a[maxN],maxLen[maxN];//maxLen[k]表示以a[k]做为“终点”的最长不上升子序列的长度
     7     int max;
     8     
     9     scanf("%d",&n);
    10     for(i=0;i<n;i++) {  scanf("%d",&a[i]); maxLen[i]=1;  }
    11 
    12     for(i=1;i<n;i++)//枚举所有子序列的终点 
    13     {
    14         for(j=0;j<i;j++)//枚举以a[i]做终点的子序列中a[i]的前缀元素 
    15         {
    16             if(a[j]>=a[i])//尝试用a[j]做a[i]的直接前缀形成新的子序列 
    17             {
    18                 maxLen[i]=(maxLen[j]+1>maxLen[i]?maxLen[j]+1:maxLen[i]);
    19             }
    20         }
    21     }
    22     max=maxLen[0];
    23     for(i=1;i<n;i++)
    24         if(maxLen[i]>max) max=maxLen[i];
    25     printf("%d
    ",max);
    26     return 0;
    27 }

    注意:不要想着把数组翻转过来然后寻找最长上升子序列哈哈哈,题目说了,不能够先拦截后面的导弹。

  • 相关阅读:
    根据wsdl反向生成webservice服务端(3种方法)
    WSDL4J解析WSDL文件方法
    Oracle高级查询之over(partition by..)
    SQL存储过程实例详解
    ios基础之UITableViewCell的重用(带示例原创)
    .net winform程序下使用firefox作为Web浏览器
    IOS高级编程之二:IOS的数据存储与IO
    IOS高级编程之一:多点触摸与手势验证
    ios基础之入门(一)
    jQuery源码分析之=>jQuery的定义
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/7348114.html
Copyright © 2011-2022 走看看