拦截导弹问题 pascal

来源:百度知道 编辑:UC知道 时间:2024/05/12 03:54:19
某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到帝国的导弹来袭,由于该系统还在实用阶段,所以一套系统有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度不大于30000的正整数)。计算要拦截所有导弹最少需配备多少套这种导弹拦截系统。
输入:
11
25 18 20 16 18 30 19 5 7 10 12
输出:
4

此题可以用贪心做
你可以这样想:你要使用的系统套数最小则每一套系统要尽其所能,即
若有100m和200m两个炮弹,则须用两套,a套打100m的,b套打200m的
但此时若来了个90m的该用哪个呢?当然是用a套,why?因为若用了b套,则两套设备所能达到的最大高度降到了100m,而用a套最大高度为200m,因此可得
入夏算法
program Owen;
var
a,b:array[0..1000]of longint;
i,n,m,j:longint;
begin
readln(n);m:=n;
for i:=1 to n do read(a[i]);
j:=0;
for i:=1 to n do b[i]:=40000;
repeat
inc(j);
for i:=1 to n do
if (b[j]>=a[i])and(a[i]<>-1) then
begin b[j]:=a[i];a[i]:=-1;m:=m-1;end;
until m=0;
writeln(j);
end.

你们做的都太麻烦了,只需这么简单。
program fxui;
var
i,a,b,c,d:longint;
begin
read(a);
read(b);c:=b;
for i:=1 to a-1 do begin
read(b);
if c>=b then d:=d+1
else break;
end;
write(d);
end.

显然这道题贪心是错误的,因为有后效性,网上随便可以找到,这是典型的dp题,最长不下降子序列。。。需要具体程序我会贴出来。。。
我觉得还是要你自己考虑一下。
program p1004(input,output);