pascal问题,小明的破旧围栏又要喷涂油漆了.围栏由N个木板构成,每个宽度都为1cm,但是高度各不相同.他给自己买了一个喷漆机器,喷涂头恰好也是1cm宽.小明的喷漆机器是直接喷射的,因此喷头的
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/27 02:28:36
pascal问题,小明的破旧围栏又要喷涂油漆了.围栏由N个木板构成,每个宽度都为1cm,但是高度各不相同.他给自己买了一个喷漆机器,喷涂头恰好也是1cm宽.小明的喷漆机器是直接喷射的,因此喷头的
pascal问题,
小明的破旧围栏又要喷涂油漆了.围栏由N个木板构成,每个宽度都为1cm,但是高度各不相同.他给自己买了一个喷漆机器,喷涂头恰好也是1cm宽.
小明的喷漆机器是直接喷射的,因此喷头的每一个部位必须一直接触到木板,否则尤其会污染他的农田.并且机器也必须时刻与地面平行.可以看出,小明每次必须在同一高度对木板喷涂,可以从左到右直到没有围栏可以喷漆.这样,若干次喷漆之后,就可以将围栏翻新啦!
由于机器的特殊性,小明希望喷涂的次数尽量的少.
小明想要知道至少需要刷多少次就可以把围栏都刷完,
pascal问题,小明的破旧围栏又要喷涂油漆了.围栏由N个木板构成,每个宽度都为1cm,但是高度各不相同.他给自己买了一个喷漆机器,喷涂头恰好也是1cm宽.小明的喷漆机器是直接喷射的,因此喷头的
本题需要一定的抽象思维能力,是2014年noip提高组(即高中组)的第一题改编版.思路:
本题可以用类似贪心的思路得到.比如说如果我们按照第一列开始涂,那么显然我们必须要涂第一列高度次才可以涂完.然后我们再来看第二列.如果第二列没有第一列高(或一样高),那么第一列显然可以在涂的过程中顺便把第二列也给涂完.如果第二列比第一列高呢?那么我们涂完第一列后,首先把第二列中和第一列相同高度的部分也给涂完.
推及到每一列,假设第i列比第i-1列高或一样(如图1-2):那么在涂第i列的时候,可以在涂a高度时把i+1列也给涂完;假设第i列比第i+1列低,那么在涂完a高度时,还需要再涂b-a高度才可以把第i+1列涂完.
那么对于三列或者更多的情况呢?其实也是一样的,我们仍然一列列看.假设为i,i+1,i+2列时,那么仍然是现将第i列涂满,再涂第i+1列没有涂完的部分(如果需要的话),那么,对于第i+2列,我们可以将第i列中移到第i+1列的喷涂机器再增加一个宽,顺便涂完.
详情请看程序:
var
i,n,x,y,ans:longint;
begin
readln(n);
for i:=1 to n do
begin
read(x); if x>y then ans:=ans+x-y; y:=x;//这是核心.如果后一列没有前一列高,就说明可以直接涂满.否则,涂上前一列没有涂到的地方,也就是高的地方.
end;
writeln(ans):
end.