詳解攔截飛彈問題(動態規劃)

2021-09-17 01:41:36 字數 940 閱讀 9774

攔截飛彈

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

389 207 155 300 299 170 158 65

輸出----這套系統最多能攔截的飛彈數和攔截所有飛彈所需最少的攔截系統數62

**問題抽象:**求最多可以攔截的飛彈數,就是求最長遞減字串長度,這個很好理解

求最少的系統數,就是求最長非遞減字串的長度,可以這樣理解,假設最長的非遞減字串長度為n, 那麼以這最長的非遞減字串的每個字元為分界點,可以將整個串分成n個小遞減的小字串,這樣每一發炮彈都可以攔截對應的小字串,倘若最長的非遞減字串長大於n, 那麼勢必會有乙個小字串不是遞減的,則這個字串就要用不止一發子彈才能打下。

演算法:以最長遞減字串為例,就是求以每個字元結尾字串中最長的,以字元i結尾的字串可以這樣表示

這裡j#include

#include

#include

using namespace std;

#define n 9999

int down[n]

;//down[i]表示以i+1個字元結尾的最長遞減子串行

int up[n]

;//up[i]表示以i+1個字元結尾的最長非遞減子串行

int h[n]

;//表示高度

int n=0;

intmain()

}int maxd=

0,maxu=0;

for(

int i=

0;i) cout

}o(n2)

動態規劃 攔截飛彈

動態規劃 攔截飛彈 時間限制 1 sec 記憶體限制 256 mb 張琪曼 老師,修羅場是什麼?墨老師 修羅是佛家用語,修羅畢生以戰鬥為目標,修羅場指的是他們之間的死鬥坑,人們通常用 修羅場 來形容慘烈的戰場。後來又引申出 乙個人在困境中做絕死奮鬥 的意思。所以,這其實也在暗示我們,即使是身處絕境,...

動態規劃之攔截飛彈

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 某國為了防禦敵國的飛彈襲擊,發展中一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於等於前一發的高度。某天,雷達捕捉到敵國飛彈來襲。由於該系統還在試用階段,所以只...

1618 動態規劃 攔截飛彈

題目描述 張琪曼 老師,修羅場是什麼?墨老師 修羅是佛家用語,修羅畢生以戰鬥為目標,修羅場指的是他們之間的死鬥坑,人們通常用 修羅場 來形容慘烈的戰場。後來又引申出 乙個人在困境中做絕死奮鬥 的意思。所以,這其實也在暗示我們,即使是身處絕境,也不要放棄奮鬥。再說了,情況其實沒有這麼糟糕,因為我們最新...