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.定义两个长度一样的数组,一个数组a用来存储敌方发射过来的导弹,一个数组b存储我方拦截的导弹的个数,且b数组中初始值为1。
    2.在数组a中从数组的最后一位往前面的开始比较,如果a[i]>a[i+1],则a[i]可以拦截a[i+1],此刻b[i]的值为2.
    3.具体的动态规划过程看下图:
    每一数都与后面的一个数相比,如果大于,说明拦截不到该导弹,就继续与下一个数相比。如果小于则可以拦截到该导弹。
    代码如下:
    package othermethod;
    
    import java.io.BufferedInputStream;
    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            Scanner sc=new Scanner(new BufferedInputStream(System.in));
            int t=sc.nextInt();//t组测试数据
            int a[]=new int[22];
            int b[]=new int[22];
            while(t-->0){
                int n=sc.nextInt();
                for(int i=0;i<n;i++)
                    a[i]=sc.nextInt();
                for(int i=0;i<n;i++)
                    b[i]=1;
                for(int i=n-2;i>=0;i--){
                    int max=0;
                    for(int j=i+1;j<n;j++){
                        if(a[i]>a[j])
                            if(b[j]>max)
                                //寻找最大的导弹拦截的个数
                                max=b[j];
                    }
                    b[i]+=max;
                   
                }
                int max=0;
                for(int i=0;i<n;i++)
                    if(b[i]>max)
                        max=b[i];
                System.out.println(max);
            }
        }
    }

    运行结果:

     

    ---恢复内容结束---

  • 相关阅读:
    springboot整合springmvc应用
    spring注解使用
    亨元模式 四大引用 逃逸引用 池化思想
    springboot整合连接池
    springboot整合mybatis(待更新)
    php安装imagick扩展
    js复制功能代码
    PHP7兼容mysql_connect的方法
    linux开机启动
    centos8安装php扩展memcached报错
  • 原文地址:https://www.cnblogs.com/java-7/p/7266879.html
Copyright © 2011-2022 走看看