1. 程式人生 > >nyoj 814 又見攔截導彈

nyoj 814 又見攔截導彈

printf 距離 題意 個數 時間 輸入一個整數 nbsp AI ID

又見攔截導彈

時間限制:3000 ms | 內存限制:65535 KB 難度:3
描述

大家對攔截導彈那個題目應該比較熟悉了,我再敘述一下題意:某國為了防禦敵國的導彈襲擊,新研制出來一種導彈攔截系統。但是這種導彈攔截系統有一個缺陷:它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過前一發的高度。突然有一天,雷達捕捉到敵國的導彈來襲。由於該系統存在缺陷,所以如果想把所有的導彈都攔截下來,就要多準備幾套這樣的導彈攔截系統。但是由於該系統成本太高,所以為了降低成本,請你計算一下最少需要多少套攔截系統。

輸入
有多組測試數據。
每組數據先輸入一個整數N(N≤3000),代表有N發導彈來襲。接下來有N個數,分別代表依次飛來的導彈的導彈的高度。當N=-1時表示輸入結束。
輸出
每組輸出數據占一行,表示最少需要多少套攔截系統。
樣例輸入
8
389 207 155 300 299 170 158 65
5
265 156 123 76 26
樣例輸出
2
1
 1 /**
 2     分析:
 3         Ⅰ、我們需要把加入的防導彈系統的最高距離實時記錄
 4         Ⅱ、遍歷該系統找出滿足條件的防導彈系統並更新其最高距離
 5             Ⅱ ( ②) 若所有防導彈沒有符合條件的就要以剛輸入的距離重新加入一個系統
 6             
 7     核心代碼:
 8         for (i = 1; i < k; ++ i) {
9 if (A [i] >= num) { 10 A[i] = num; 11 break; 12 } 13 } 14 if (i == k) { 15 A[k ++] = num; 16 } 17 **/

C/C++代碼實現(AC):

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 int n;
 6 
 7 int
main () { 8 while (~scanf ("%d", &n), n != -1) { 9 int A [3005], k = 1, i, num; 10 while (n --) { 11 scanf ("%d", &num); 12 for (i = 1; i < k; ++ i) { 13 if (A [i] >= num) { 14 A [i] = num; 15 break; 16 } 17 } 18 if (i == k) { 19 A [k ++] = num; 20 } 21 } 22 printf ("%d\n", k - 1); 23 } 24 }

nyoj 814 又見攔截導彈