動態規劃 防衛飛彈

2021-07-24 14:04:04 字數 1180 閱讀 2735

描述

一種新型的防衛飛彈可截擊多個攻擊飛彈。它可以向前飛行,也可以用很快的速度向下飛行,可以毫無損傷地截擊進攻飛彈,但不可以向後或向上飛行。但有乙個缺點,儘管它發射時可以達到任意高度,但它只能截擊比它上次截擊飛彈時所處高度低或者高度相同的飛彈。現對這種新型防衛飛彈進行測試,在每一次測試中,發射一系列的測試飛彈(這些飛彈發射的間隔時間固定,飛行速度相同),該防衛飛彈所能獲得的資訊包括各進攻飛彈的高度,以及它們發射次序。現要求編一程式,求在每次測試中,該防衛飛彈最多能截擊的進攻飛彈數量,乙個飛彈能被截擊應滿足下列兩個條件之一:

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個飛彈前最大攔截飛彈數

}}

防衛飛彈 動態規劃入門題)

一種新型的防衛飛彈可截擊多個攻擊飛彈.它可以向前飛行,也可以用很快的速度向下飛行,可以毫無損傷地截擊進攻飛彈,但不可以向後或向上飛行.但有乙個缺點,儘管它發射時可以達到任意高度,但它只能截擊比它上次截擊飛彈時所處高度低或者高度相同的飛彈.現對這種新型 防衛飛彈進行測試,在每一次測試中,發射一系列的測...

防衛飛彈問題

描述 一種新型的防衛飛彈可截擊多個攻擊飛彈。它可以向前飛行,也可以用很快的速度向下飛行,可以毫無損傷地截擊進攻飛彈,但不可以向後或向上飛行。但有乙個缺點,儘管它發射時可以達到任意高度,但它只能截擊比它上次截擊飛彈時所處高度低或者高度相同的飛彈。現對這種新型防衛飛彈進行測試,在每一次測試中,發射一系列...

動態規劃 飛彈攔截

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