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