编程语言
首页 > 编程语言> > 蓝桥 算法训练 拦截导弹

蓝桥 算法训练 拦截导弹

作者:互联网

问题描述

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

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

输入格式

  一行,为导弹依次飞来的高度

输出格式

  两行,分别是最多能拦截的导弹数与要拦截所有导弹最少要配备的系统数

样例输入

389 207 155 300 299 170 158 65

样例输出

6
2

  1 import java.io.BufferedReader;
  2 import java.io.IOException;
  3 import java.io.InputStreamReader;
  4 import java.util.Scanner;
  5 
  6 public class Main {
  7      public static void main(String arg[]) throws IOException {
  8          BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  9        String s=br.readLine();
 10        String sz[]=s.split("\\s+");
 11        int high[]=new int[sz.length];
 12          for (int i = 0; i < sz.length; i++) {
 13              high[i]=Integer.parseInt(sz[i]);
 14          }
 15         int d1[]=new int[high.length];
 16 
 17          /**
 18           * 最大拦截导弹数
 19           */
 20          for (int i = 0; i < d1.length; i++) {
 21              d1[i]=1;
 22          }
 23          for (int i = 0; i < high.length; i++) {
 24              for (int i1 = 0; i1 < i; i1++) {
 25                  if(high[i]<=high[i1]){
 26                      d1[i]=Math.max(d1[i],d1[i1]+1);
 27                  }
 28              }
 29          }
 30          int max=-1;
 31          for (int i = 0; i < d1.length; i++) {
 32              if(max<d1[i]){
 33                  max=d1[i];
 34              }
 35          }
 36 
 37          /**
 38           * 最少系统数
 39           */
 40          int min=0;
 41          boolean lj[]=new boolean[high.length];
 42          for (int i = 0; i < high.length; i++) {
 43              int sy=-1;
 44              for (int i1 = 0; i1 < i; i1++) {
 45                  if(lj[i1]==false&&high[i1]>=high[i]){
 46                      if(sy==-1||high[i1]<high[sy]){
 47                          sy=i1;
 48                      }
 49                  }
 50              }
 51              if(sy==-1){
 52                  min++;
 53              }
 54              else{
 55                  lj[sy]=true;
 56              }
 57 
 58          }
 59          System.out.println(max);
 60          System.out.println(min);
 61 
 62 
 63      }
 64 
 65 
 66 
 67 
 68 
 69     /*
 70     这代码样例可过,但在io中有问题,应该是在求io上出现问题
 71     public static void main(String arg[]){
 72       Scanner in=new Scanner(System.in);
 73       String s=in.nextLine();
 74       String sz[]=s.split("\\s+");
 75       int sz1[]=new int[sz.length];
 76          for (int i = 0; i < sz.length; i++) {
 77              sz1[i]=Integer.parseInt(sz[i]);
 78          }
 79       int d1[]=new int[sz1.length];//求最大下降序列长度
 80       int d2[]=new int[sz1.length];//求最大上升序列长度
 81          for (int i = 0; i < sz1.length; i++) {
 82              d1[i]=1;d2[2]=1;
 83          }
 84 
 85          for (int i = 0; i < sz1.length; i++) {
 86              for (int i1 = 0; i1 < i; i1++) {
 87                  if(sz1[i]<=sz1[i1]){
 88                      d1[i]=Math.max(d1[i],d1[i1]+1);
 89                  }
 90                  else{
 91                      d2[i]=Math.max(d2[i],d2[i1]+1);
 92                  }
 93 
 94              }
 95          }
 96 
 97          int s1=-1;int s2=-1;
 98          for (int i = 0; i < d1.length; i++) {
 99              s1=Math.max(s1,d1[i]);
100          }
101          for (int i = 0; i < d2.length; i++) {
102              s2=Math.max(s2,d2[i]);
103          }
104          System.out.println(s1);
105          System.out.println(s2);
106 
107      }
108 */
109     
110 }

 

标签:拦截导弹,high,int,length,导弹,蓝桥,算法,import,拦截
来源: https://www.cnblogs.com/hwhWorld/p/10462853.html