NOI 8780 攔截飛彈 線性dp

2021-09-26 06:22:47 字數 1377 閱讀 8271

總時間限制: 1000ms 記憶體限制: 65536kb

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

輸入飛彈依次飛來的高度(雷達給出的高度資料是不大於30000的正整數),計算這套系統最多能攔截多少飛彈。

輸入第一行是乙個整數n(不超過15),表示飛彈數。

第二行包含n個整數,為飛彈依次飛來的高度(雷達給出的高度資料是不大於30000的正整數)。

輸出乙個整數,表示最多能攔截的飛彈數。

樣例輸入

8389 207 155 300 299 170 158 65

樣例輸出

6這是一題線性dp的基礎題,甚至可以算這一類題目的模板題,所以寫一下以後回來參考。

題目本身沒有難度,求的是最長非上公升子串行,以後求什麼最長上公升子串行、最長下降子串行都用得到這一題的**,所以直接上**,注釋我想已經夠清楚了。

#include

#include

#include

#include

#include

#include

#include

#include

#include

const

int max=

1e6+5;

using

namespace std;

int h[

2000

], d[

2000

], n, c;

intmain()

/// 實在理解不了咱再模擬一手案例,結合一下**就很好理解為什麼最後輸出c了

///389 207 155 300 299 170 158 65 c=1

///389 0 0 0 0 0 0 0 c=1

///389 207 0 0 0 0 0 0 c=2

///389 207 155 0 0 0 0 0 c=3

///389 300 155 c=3

///389 300 299 c=3

///389 300 299 170 c=4

///389 300 299 170 158 c=5

///389 300 299 170 158 65 c=6

cout << c << endl;

}

NOI 8780 攔截飛彈(dfs or dp)

思路1 剛開始想到dfs,n不太大 小於20 每個飛彈有兩種情況,選或不選 揹包問題 選,那麼更新h為當前飛彈高度,並用if剪枝一下 不選,就是跳過它,僅index 1即可 include define fo i,a,b for int i a i 選用 using namespace std in...

NOI 8780 攔截飛彈 入門dp

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

攔截飛彈(DP)

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