您的位置:首页 > 其它

1999年分区联赛提高组之一 拦截导…

2016-04-08 21:44 183 查看
Description  某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。  输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。InputOutputSample 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
);

b
:=1;

c
:=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.


版权属于: Chris原文地址: http://blog.sina.com.cn/s/blog_83ac6af80102v0ie.html转载时必须以链接形式注明原始出处及本声明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: