攔截飛彈問題(貪心演算法)

2021-07-11 01:57:59 字數 1825 閱讀 6965

description

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

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

input

output

sample input

300 250 275 252 200 138 245

sample output

5(最多能攔截的飛彈數)

2(要攔截所有飛彈最少要配備的系統數)

解題思路:

先讀入資料,然後用迴圈統計一套飛彈攔截系統最多能攔截的飛彈數量,儲存在陣列中,並進行比對,把最

大值進行輸出,後面根據前面所統計出來的資料,用迴圈對需要的系統數量進行累加,最後輸出這個累加值即可。

程式:
var
a,b,c,k:array[1..1000] of longint;
n,i,j,max,min,high:longint;
begin
while not eoln do

begin

inc(n);

read(a[n]);

b[n]:=1;

c[n]:=0;

end;

for i:=n-1 downto 1 do

begin

max:=0;

for j:=i+1 to n do

if (a[j]<=a[i]) and (b[j]>max) then max:=b[j];

b[i]:=max+1;

end;

max:=0;
for i:=1 to n do

if b[i]>max then max:=b[i];

writeln(max);
min:=0;
for i:=1 to n do

begin

if k[i]<>1 then

begin

k[i]:=1;

high:=a[i];

for j:=i+1 to n do

if (high>=a[j]) and (k[j]<>1) then

begin

high:=a[j];

k[j]:=1;

end;

inc(min);

end;

end;

writeln(min);
end.

攔截飛彈問題(貪心演算法)

時間限制 1000 ms 記憶體限制 65536 kb 某國為了防禦敵國的飛彈襲擊,開發出一種飛彈攔截系統,但是這種攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲,由於該系統還在試用階段。所以一套系統有可能不能攔截所...

攔截飛彈 貪心

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

演算法 攔截飛彈問題

攔截飛彈問題 20分 某國為了防禦敵國的飛彈襲擊,開發出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲,並觀測到飛彈依次飛來的高度,請計算這套系統最多能攔截多少飛彈。攔截來襲飛彈時,必須...