zoukankan      html  css  js  c++  java
  • (Java实现) 拦截导弹

    1260:【例9.4】拦截导弹(Noip1999)

    时间限制: 1000 ms 内存限制: 65536 KB
    提交数: 4063 通过数: 1477

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

    输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,导弹数不超过1000),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

    【输入】
    n (一共n个导弹)
    输入导弹依次飞来的高度。

    【输出】
    第一行:最多能拦截的导弹数;

    第二行:要拦截所有导弹最少要配备的系统数。

    【输入样例】
    389 207 155 300 299 170 158 65
    【输出样例】
    6
    2
    思路:

    求最多能拦截的导弹数就是求最长不上升子序

    求拦截系统数,就是求最长上升子序

    import java.util.Scanner;
    
    
    public class lanjiedaodanwenti {
    	public static void main(String args[]) {
    		Scanner sc = new Scanner(System.in);
    //		
    //		String str = sc.nextLine();
    //		String[] s = str.split(" ");
    		int n = sc.nextInt();
    		int[] num = new int[n];
    //		for(int i=0; i<s.length; i++) num[i] = Integer.parseInt(s[i]);
    		for (int i = 0; i <n; i++) {
    			num[i]=sc.nextInt();
    		}
    		int[] dp_1 = new int[n];
    		int[] dp_2 = new int[n];
    		for(int i=0; i<n; i++) {
    			dp_1[i] = 1; dp_2[i] = 1;
    		}
    		for(int i=0; i<n; i++) {
    			for(int j=0; j<i; j++) {
    				if(num[i]<=num[j]) {
    					dp_1[i] = Math.max(dp_1[i], dp_1[j]+1);
    				}else {
    					dp_2[i] = Math.max(dp_2[i], dp_2[j]+1);
    				}
    			}
    		}
    //		for(int i=0; i<s.length; i++) System.out.print(dp_1[i]+" ");
    //		System.out.println();
    //		for(int i=0; i<s.length; i++) System.out.print(dp_2[i]+" ");
    //		System.out.println();
    		int ans_1 = -1, ans_2 =-1;
    		for(int i = 0; i<n; i++) {
    			ans_1 = Math.max(ans_1, dp_1[i]);
    			ans_2 = Math.max(ans_2, dp_2[i]);
    //			System.out.print(num[i]+" ");
    		}
    //		System.out.println();
    		System.out.println(ans_1);
    		System.out.println(ans_2);	
    	}
    }
    
    
  • 相关阅读:
    蓝桥杯 算法训练 ALGO-57 删除多余括号
    蓝桥杯 算法训练 ALGO-50 数组查找及替换
    蓝桥杯 算法训练 ALGO-60 矩阵乘法
    求最大公约数和最小公倍数的几种方法
    南阳OJ 1170 最大的数
    蓝桥杯 基础练习 BASIC-30 阶乘计算
    蓝桥杯 算法训练 ALGO-108 最大的体积
    蓝桥杯 算法训练 ALGO-114 黑白无常
    蓝桥杯 算法训练 ALGO-93 反置数
    蓝桥杯 算法训练 ALGO-21 装箱问题
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13079064.html
Copyright © 2011-2022 走看看