3005 攔截飛彈問題(noip1999)

2021-09-28 10:05:21 字數 998 閱讀 5220

time limit: 3 second

memory limit: 2 mb

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

輸入飛彈一次飛來的高度(雷達給出的高度是不大於2147483647的正整數)。計算要攔截所有飛彈時最小需要配備所少套這種飛彈攔截系統。

輸入檔案兩行

第一行輸入n

第二行輸入n顆依次飛來的飛彈高度,輸入的各個元素用空格隔開(1≤n≤1000)。

輸出要攔截所有飛彈最小配備的系統數k。(最後用換行結束)

8

389 207 155 300 299 170 158 65

2
【題解】

打飛彈的過程就是求最長下降子串行的過程,每次都求最長的,讓每個飛彈的效果達到最大。

打完後的飛彈,用乙個bool型陣列 置為false,下一次掃瞄的時候,直接跳過就可以了.

【**】

#include int n,a[1002],f[1002],ans = 0,rest,pre[1002],now,maxn = 0;

bool bo[1002];

void input_data()

void get_ans()

for (int j = 1;j <= i-1;j++) //往前面嘗試更新f[i]

if (bo[j] && a[i] <= a[j] && ((f[j] + 1) > f[i])) //沒有用過 滿足遞減 有更新必要}}

while (now != -1) //如果沒有輸出到根 就繼續輸出

ans++;

maxn = 0;

}}void output_ans()

int main()

3005 攔截飛彈問題(noip1999)

time limit 3 second memory limit 2 mb 某國為了防禦帝國的飛彈襲擊,開發出一種飛彈攔截系統,但是這種攔截系統有乙個缺陷 雖然他的第一發炮彈能達到任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲,由於該系統還在試用階段,所以這套系...

NOIP 攔截飛彈

題意很簡潔,一共兩問。第一問是求單個攔截系統最多能攔截多少個,根據題意即最長非上公升子串行。第二問有多少飛彈攔截系統才能攔截全部飛彈,即有多少最長非上公升子串行才能包括全部數。稍加思考即可得出最長上公升子串行的長度即為答案。本題的轉化思考和兩個求序列長度寫法要記一下 就我目前看到的題解貌似沒人這麼寫...

攔截飛彈問題(NOIP1999)

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