time limit: 3 second
memory limit: 2 mb
某國為了防禦帝國的飛彈襲擊,開發出一種飛彈攔截系統,但是這種攔截系統有乙個缺陷:雖然他的第一發炮彈能達到任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲,由於該系統還在試用階段,所以這套系統有可能不能攔截所有的飛彈。
輸入飛彈一次飛來的高度(雷達給出的高度是不大於2147483647的正整數)。計算要攔截所有飛彈時最小需要配備所少套這種飛彈攔截系統。
輸入檔案兩行
第一行輸入n
第二行輸入n顆依次飛來的飛彈高度,輸入的各個元素用空格隔開(1≤n≤1000)。
輸出要攔截所有飛彈最小配備的系統數k。(最後用換行結束)
8389 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...