zoukankan      html  css  js  c++  java
  • 导弹拦截之动态规划

     防御导弹

    题目描述

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

    输入

    最多20个整数,分别表示导弹依次飞来的高度(雷达给出高度数据是不大于30000的正整数)

    输出

    整数M。表示:这套系统最多能拦截 M 枚导弹.

    样例输入

    300 250 275 252 200 138 245

    样例输出

    5
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Main{
    	static int R=0;//保存结果,声明为全局变量
    	public static int aa(int[] data,int i,int min,int N) {
    		for(;i<data.length;i++) {//从数组当前的值开始遍历
    			if(data[i]<=min) {//假如当前值小于min便有两种选着(1、拦下了2、不拦下来)否者i++遍历下一个元素
    				int num1=aa(data, i+1, data[i], N+1);//拦截当前导弹 min改为当前值,N自动加一(递归)
    				int num2=aa(data, i+1, min, N);//不拦截当前导弹,min还是min(递归)
    				if(num1>num2) {//在遍历的一轮结束后,将大值付给N
    					N=num1;
    				}else {
    					N=num2;
    				}
    			}
    		}
    		R=R>N?R:N;//将没一轮的比较后的大值赋给R,即R保存最大值
    		N=0;//每一轮结束后N归零,从新开始下一轮
    		return N;
    	}
    	public static void main(String[] args) {
    		Scanner scanner=new Scanner(System.in);
    		String string1=scanner.nextLine();
    		String[] strings=string1.split(" ");//字符串转换为字符串数组
    		int[] data=new int[strings.length];
    		for(int i=0;i<strings.length;i++) {
    			data[i]=Integer.parseInt(strings[i]);//将字符串数组转换为整数数字
    		}
    		int N=0;//在每一趟搜索时保存的拦截炮弹数
    		N=aa(data,0,30000,N);//题目要去《=30000,所以min的初始值设为30000
    		System.out.println(R);
    	}
    }
    

      

  • 相关阅读:
    第八周
    请停止使用strncpy
    WER设置
    如何在dump文件里找到真正的类this指针
    Visual Studio /analyze不好之处---漏报(四)
    Visual Studio /analyze不好之处---漏报(三)
    Visual Studio /analyze不好之处---漏报(二)
    Visual Studio /analyze不好之处(一)
    Visual Studio /analyze的好处
    符号杂谈
  • 原文地址:https://www.cnblogs.com/0405mxh/p/10123871.html
Copyright © 2011-2022 走看看