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

    某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹。拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹。


    Input
    输入有两行,
    第一行,输入雷达捕捉到的敌国导弹的数量k(k<=25),
    第二行,输入k个正整数,表示k枚导弹的高度,按来袭导弹的袭击时间顺序给出,以空格分隔。

    Output
    输出只有一行,包含一个整数,表示最多能拦截多少枚导弹。

    Sample Input
    8
    300 207 155 300 299 170 158 65
    Sample Output
    6
     1 //动态规划算法
     2 
     3 #include <stdio.h>
     4 #include <string.h>
     5 
     6 #define MAX 30
     7 
     8 int main()
     9 {
    10     int k;
    11     int high[MAX];  //存入每个导弹的高度
    12     //以第i颗导弹作为最后一个拦截目标,
    13     //并将此种状态下能拦截的导弹数量
    14     //存入数组maxNum[i]
    15     int maxNum[MAX];  
    16     int max;
    17     int i,j;
    18     scanf("%d",&k);
    19     for (i=1; i<=k; i++)
    20     {
    21       scanf("%d",&high[i]);
    22     }
    23     memset(maxNum,0,sizeof(maxNum));
    24     for (i=1; i<=k; i++)
    25     {
    26       for (j=1; j<=i; j++)
    27         if (high[j]>=high[i]&&maxNum[j]>=maxNum[i])
    28           maxNum[i] = maxNum[j];
    29       maxNum[i] += 1;
    30     }
    31     max = maxNum[1];
    32     for (i=2; i<=k; i++)
    33       if (maxNum[i]>max)
    34         max = maxNum[i];
    35     printf("%d",max);
    36 
    37 
    38     return 0;
    39 }
    蒹葭苍苍,白露为霜; 所谓伊人,在水一方。
  • 相关阅读:
    HDU 2236 无题Ⅱ
    Golden Tiger Claw(二分图)
    HDU 5969 最大的位或 (思维,贪心)
    HDU 3686 Traffic Real Time Query System (图论)
    SCOI 2016 萌萌哒
    Spring Boot支持控制台Banner定制
    构建第一个Spring Boot程序
    Spring Boot重要模块
    Java fastjson JSON和String互相转换
    BCompare 4 Windows激活方法【试用期30天重置】
  • 原文地址:https://www.cnblogs.com/huwt/p/9986488.html
Copyright © 2011-2022 走看看