BTTCOJ 1072 攔截飛彈 最長上公升子串行

2021-10-04 00:09:24 字數 1139 閱讀 4500

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

輸入格式

每個測試檔案只包含一組測試資料,每組輸入若干個整數,表示飛彈依次飛來的高度(雷達給出的高度資料是不大於30000的正整數)。

輸出格式
對於每組輸入資料,第一行輸出這套系統最多能攔截多少飛彈,第二行輸出如果要攔截所有飛彈最少要配備多少套這種飛彈攔截系統。

輸入樣例
389 207 155 300 299 170 158 65

輸出樣例
6

2

解題思路

第一次系統的學習了線性dp,做了這個遞推型動規題解,解題思路分三步:

第一步先找子問題,求n個數的最長子序列的長度的子問題就是求前n個最長子序列的長度。

第二步確定狀態,子問題只和乙個變數有關,那就是數字的位置,那麼就很好得出數字的位置k就是數字的狀態,而狀態k對應的值,就是以a[k]做為重點的最長上公升子串行的長度。

第三步找出狀態轉移方程,首先初始狀態lis[0]=1,因為只有乙個數字,而當k>=1時,有方程max_len(k)=(max_len(i):1<=i.h>

using namespace std;

const int maxn=

100005

;int a[maxn]

;int lis[maxn]

;int dp[maxn]

;int main()

for(int i=

1;i} cout<<

*max_element

(lis,lis+k)

for(int i=

1;i} cout<<

*max_element

(dp,dp+k)

return0;

}

攔截飛彈 vip

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

1044 攔截飛彈

1999年noip全國聯賽提高組 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解 題目描述 description 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的...

攔截飛彈 題解

description ggf最近經常遭到不明飛彈的襲擊,因此他只好開發了一套飛彈攔截系統。該系統非常先進,使用會拐彎的雷射對飛彈進行射擊。所有被雷射擊中的飛彈就瞬間完蛋,而且一束雷射可以同時摧毀多枚飛彈。但雷射只能向上發射,所以若同一束雷射能依次擊中多枚飛彈,則這些飛彈座標的每一維都嚴格單調上公升...