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);
            }
        }
    }

    运行结果:

     

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

  • 相关阅读:
    Spring解决循环依赖的三种方式
    MySQL深度分页
    MySQL大数据量分页查询方法及其优化
    java进程 cpu100%问题排查
    Java线程池如何合理配置核心线程数
    Btree和B+tree的区别
    Python3 for Linux 安装
    redis sentinel 相关参数及命令
    postman 连接mysql
    oracle-数据库的各种-锁-详解
  • 原文地址:https://www.cnblogs.com/java-7/p/7266879.html
Copyright © 2011-2022 走看看