描述
一種新型的防衛飛彈可截擊多個攻擊飛彈。它可以向前飛行,也可以用很快的速度向下飛行,可以毫無損傷地截擊進攻飛彈,但不可以向後或向上飛行。但有乙個缺點,儘管它發射時可以達到任意高度,但它只能截擊比它上次截擊飛彈時所處高度低或者高度相同的飛彈。現對這種新型防衛飛彈進行測試,在每一次測試中,發射一系列的測試飛彈(這些飛彈發射的間隔時間固定,飛行速度相同),該防衛飛彈所能獲得的資訊包括各進攻飛彈的高度,以及它們發射次序。現要求編一程式,求在每次測試中,該防衛飛彈最多能截擊的進攻飛彈數量,乙個飛彈能被截擊應滿足下列兩個條件之一:
a)它是該次測試中第乙個被防衛飛彈截擊的飛彈;
b)它是在上一次被截擊飛彈的發射後發射,且高度不大於上一次被截擊飛彈的高度的飛彈。
輸入 多個測例。
每個測例第一行是乙個整數n(n不超過100),第二行n個整數表示飛彈的高度(數字的順序即發射的順序)。
n=0表示輸入結束。
輸出 每個測例在單獨的一行內輸出截擊飛彈的最大數目。
輸入樣例 5
5 6 100 6 610
輸出樣例 2
基本思路 : 定義l[i]為選擇截擊第i個飛彈,從這個飛彈開始最多能截擊的飛彈數目。由於選擇了第i枚飛彈,所以下乙個要截擊的飛彈j的高度要小於等於它的高度,所以l[i]應該等於從i+1到n的每乙個j,滿足h[j]<=h[i]的j中l[j]的最大值。下面貼上**,已經經過測試。
#include using namespace std;
int hight[100], num[100];
int n, key;
void get_max();
int main()
get_max();
cout << key << endl;
key = 0;
//for(int i = 0; i < n; i++)
//cout << num[i] << " ";
cin >> n;
}}void get_max()
/* num[i] = num[i + 1];
if((largenum + 1) > num[i])*/
num[i] = largenum + 1;
if(key < num[i]) key = num[i];//key記錄第i個飛彈前最大攔截飛彈數
}}
防衛飛彈 動態規劃入門題)
一種新型的防衛飛彈可截擊多個攻擊飛彈.它可以向前飛行,也可以用很快的速度向下飛行,可以毫無損傷地截擊進攻飛彈,但不可以向後或向上飛行.但有乙個缺點,儘管它發射時可以達到任意高度,但它只能截擊比它上次截擊飛彈時所處高度低或者高度相同的飛彈.現對這種新型 防衛飛彈進行測試,在每一次測試中,發射一系列的測...
防衛飛彈問題
描述 一種新型的防衛飛彈可截擊多個攻擊飛彈。它可以向前飛行,也可以用很快的速度向下飛行,可以毫無損傷地截擊進攻飛彈,但不可以向後或向上飛行。但有乙個缺點,儘管它發射時可以達到任意高度,但它只能截擊比它上次截擊飛彈時所處高度低或者高度相同的飛彈。現對這種新型防衛飛彈進行測試,在每一次測試中,發射一系列...
動態規劃 飛彈攔截
某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷 達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有 的飛彈。輸入資料 第一行為乙個整數 ...