zoukankan      html  css  js  c++  java
  • 拦截导弹 转化为求最大递减问题

    描述

    某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于等于前一发的高度。某天,雷达捕捉到敌国导弹来袭。由于该系统还在试用阶段,所以只用一套系统,因此有可能不能拦截所有的导弹。

    输入
    第一行输入测试数据组数N(1<=N<=10)
    接下来一行输入这组测试数据共有多少个导弹m(1<=m<=20)
    接下来行输入导弹依次飞来的高度,所有高度值均是大于0的正整数。
    输出
    输出最多能拦截的导弹数目
    样例输入
    2
    8
    389 207 155 300 299 170 158 65
    3
    88 34 65
    样例输出
    6
    2

    解题思路: 

           此问题可以转化为求解递减序列问题(单调递增最长子序列)。

     1 #include "stdafx.h"
     2 #include <iostream>
     3 using namespace std;
     4 int test[20+1];
     5 #define max(a,b)(a>b?a:b)
     6 int _tmain(int argc, _TCHAR* argv[])
     7 {
     8     int testNum,missileNum,p[21];
     9     cin>>testNum;
    10     while(testNum--)
    11     {
    12         int MAX=0;
    13         cin>>missileNum;
    14         for(int i=0;i<=missileNum;i++)
    15             p[i]=1;
    16         for(int i=1;i<=missileNum;i++)
    17         {
    18             cin>>test[i];
    19         }
    20         for(int i=2;i<=missileNum;i++)
    21             for(int j=i-1;j>=1;j--)
    22                 if(test[i]<test[j]&&p[i]<=p[j]){
    23                     p[i]=p[j]+1;
    24                     if(MAX<p[i])
    25                         MAX=p[i];
    26                 }
    27 
    28         cout<<MAX<<endl;
    29             }
    30     system("pause");
    31     return 0;
    32 }
    View Code
  • 相关阅读:
    给入坑前端的新人的建议
    浅析js闭包
    mongoose之操作mongoDB数据库
    input模拟输入下拉框
    浅析AngularJS自定义指令之嵌入(transclude)
    vue-cli之打包多入口配置
    Node.js之图片上传
    移动端之模态框滚动穿透问题
    浅谈vue之动态路由匹配
    vuex数据持久化存储
  • 原文地址:https://www.cnblogs.com/xiaoyi115/p/3180243.html
Copyright © 2011-2022 走看看