1. 程式人生 > >藍橋 算法訓練 攔截導彈

藍橋 算法訓練 攔截導彈

捕捉 java lse ger input 長度 exc 能夠 ole

問題描述

  某國為了防禦敵國的導彈襲擊,發展出一種導彈攔截系統。但是這種導彈攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的導彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的導彈。

輸入導彈依次飛來的高度(雷達給出的高度數據是不大於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 }

藍橋 算法訓練 攔截導彈