動態規劃練習1 飛彈攔截

2021-08-02 20:03:51 字數 911 閱讀 4249

【問題描述】

某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷:雖然

它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到

敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。

輸入飛彈依次飛來的高度(雷達給出的高度資料是不大於

30000

的正整數),計算這套系統最多能攔

截多少飛彈,如果要攔截所有飛彈最少要配備多少套這種飛彈攔截系統。

【輸入檔案】

missile.in

單獨一行列出飛彈依次飛來的高度。

【輸出檔案】

missile.out

兩行,分別是最多能攔截的飛彈數,要攔截所有飛彈最少要配備的系統數

【輸入樣例】

389 207 155 300 299 170 158 65

【輸出樣例】62

思路:設飛彈高度序列表示為x1,x2,x3,……,xn

因為一套攔截系統所能攔截的飛彈高度是逐漸下降的,所以對於序列中xi < xj(i<=j)那麼第j顆飛彈與第i顆飛彈肯定不能使用一套系統進行攔截。考慮這個飛彈序列的最長上公升子串行,設其長度為k,那麼我們可以知道至少需要準備k套飛彈。實際上k套飛彈是足夠將所有的n發飛彈擊落的。

#include #include #include #include using namespace std;

const int max = 10000;

int dp[max];

int a[max];

int main()

int ans = 0;

for(int i = 0;i < n;i++)

ans = max(ans,dp[i]);

} cout<

動態規劃 飛彈攔截

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

飛彈攔截 動態規劃

描述 某國為了防禦敵國的飛彈襲擊,開發出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲,並觀測到飛彈依次飛來的高度,請計算這套系統最多能攔截多少飛彈。攔截來襲飛彈時,必須按來襲飛彈襲擊的...

動態規劃之飛彈攔截

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