codevs 攔截飛彈 1044

2021-07-26 14:30:12 字數 937 閱讀 9085

題目描述 description

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

輸入描述 input description

輸入飛彈依次飛來的高度(雷達給出的高度資料是不大於30000的正整數)

輸出描述 output description

輸出這套系統最多能攔截多少飛彈,如果要攔截所有飛彈最少要配備多少套這種飛彈攔截系統。

樣例輸入 sample input

389 207 155 300 299 170 158 65 

樣例輸出 sample output62

資料範圍及提示 data size & hint

飛彈的高度<=30000,飛彈個數<=20

var   a,b:array[1..3000]of longint;

n,i,j,x,k,p:longint;

begin

while not eoln do

begin

inc(n);

read(x);

if n=1 then b[1]:=x;

a[n]:=x;

end;

k:=1;

for i:=2 to n do

begin

p:=0;

for j:=1 to k do

if b[j]>=a[i] then if p=0 then p:=j

else if b[j]if p=0 then begin inc(k);b[k]:=a[i];end

else b[p]:=a[i];

end;

writeln(k);

end.

codevs1044攔截飛彈

這個題第一問是求最長下降子串行,第二問可以轉化成求最長上公升子串行,為什麼?因為我們每遇到有hi hj的情況 i j 都要再使用一枚飛彈,因為飛彈只處理hi hj的情況嘛,很好理解的吧 所以 如下 完全可以更短 include include include include using namesp...

codevs 1044 攔截飛彈

傳送門 解題思路 首先求解最多攔截多少飛彈,每個飛彈有兩種情況,攔截或者不攔截,01揹包問題,但是空間複雜度比較高。我們可以考慮這樣乙個問題,攔截的最後乙個飛彈一定時最小的,因此我們從後往前找,只要這個飛彈之後沒有更小的,那麼這就是最後乙個飛彈,如果有更小的,那這個就是更小的那個飛彈的前乙個。所以我...

code VS 1044 攔截飛彈

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