最少攔截系統
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 8767 Accepted Submission(s): 3398
Problem Description
某國為了防御敵國的導彈襲擊,發展出一種導彈攔截系統.但是這種導彈攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以后每一發炮彈都不能超過前一發的高度.某天,雷達捕捉到敵國的導彈來襲.由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的導彈.
怎么辦呢?多搞幾套系統唄!你說說倒蠻容易,成本呢?成本是個大問題啊.所以俺就到這里來求救了,請幫助計算一下最少需要多少套攔截系統.
怎么辦呢?多搞幾套系統唄!你說說倒蠻容易,成本呢?成本是個大問題啊.所以俺就到這里來求救了,請幫助計算一下最少需要多少套攔截系統.
Input
輸入若干組數據.每組數據包括:導彈總個數(正整數),導彈依此飛來的高度(雷達給出的高度數據是不大於30000的正整數,用空格分隔)
Output
對應每組數據輸出攔截所有導彈最少要配備多少套這種導彈攔截系統.
Sample Input
8 389 207 155 300 299 170 158 65
Sample Output
2
1 /* 2 功能Function Description: HDOJ-1257 求最長 不降 子序列 3 開發環境Environment: DEV C++ 4.9.9.1 4 作者Author: 可笑痴狂 5 日期Date: 20120723 6 備注Notes: 7 解題思路: 8 應該求最長 不降 子序列。這樣的長度才是 最少需要的 套數,因為這個序列中的任何兩個導彈 9 都不能共用一個攔截系統 ,而且其余的導彈 都能和這個最長序列中的某個導彈分為同一組。 10 11 */ 12 13 #include<cstdio> 14 15 int main() 16 { 17 int n,i,j,num,h[1000],max[1000]; 18 while(~scanf("%d",&n)) 19 { 20 num=0; 21 for(i=0;i<n;++i) 22 { 23 scanf("%d",&h[i]); 24 max[i]=1; 25 } 26 for(i=1;i<n;++i) 27 for(j=0;j<i;++j) 28 { 29 if(h[j]<=h[i]&&max[j]+1>max[i]) 30 max[i]=max[j]+1; 31 if(num<max[i]) 32 num=max[i]; 33 } 34 printf("%d\n",num); 35 } 36 return 0; 37 }