一个菜菜的蜕变之路?

时间是个常数,也是个变数

jzoj P1336 【2011.12.10普及模拟】泽泽在英国

题目描述

泽泽用了100000000000000000000 mod 10天的时间爬出了长城。长城的另一端是一条隧道,泽泽走了进去……

泽泽不小心又到了英国。英国多雨,基本上隔2天就要下一场雨。泽泽人品不好,到这里的时候天正在下酸雨。

酸雨会腐蚀建筑物,让那些建筑物显得很难看。英国有家工厂免费为一条街道的建筑物的墙面涂油漆。心肠虽好,但是由于技术问题,他们只能涂出一个矩形。现在由于酸雨事态严重,街道办主任下命令涂出面积最大的矩形。

街道上的建筑物高度参差不齐,那该怎么办呢?

他们想到了泽泽。

泽泽接到了这个任务,就去测量了这个街道上的所有建筑物的高度。

请根据泽泽的数据,计算出最大面积。

输入

第1行1个整数n。表示有几幢楼。

之后的一行有n个整数,表示第几幢楼的高度,最高的楼的高度为m。

输出

一个整数,制作防护板的最大面积。

样例输入

20

5 3 7 4 8 9 2 4 5 5 5 4 4 4 8 7 4 4 5 10

样例输出

52

数据范围限制

提示

【样例说明】
最大面积为如图灰色部分所示 :
这里写图片描述

【限制】
对于30%的数据,n<=100,m<=20
对于100%的数据,n<=100000,m<=50

模拟+滚动数组:
1.a[i]表示到第j个建筑物的时候,连续高度i的面积为多少。
2.如果当前建筑i的高度x比前一个建筑j的高度y低的话,即x< y,就代表x+1到y的高度无法连续了,就判断一下他们的面积找最大。
3。x>y,1到y的高度全部都可以连续,而y+1到x的连续个数就要从1开始了。
4.全部做完以后,最后一个建筑的高度已经无法连续了,而它的a[i]还没有比较,这时把它的高度1~X*他们的连续个数的面积全部做一次比较。
时间复杂度:O(NM)

 var
   a,b:array [0..51] of longint;
   max,i,j,n,x,y:longint;
begin
     assign(input,'england.in');
     assign(output,'england.out');
     reset(input); rewrite(output);
     readln(n);
     for i:=1 to n do
         begin
             read(x);
             if x<y then
                begin
                     for j:=1 to x do a[j]:=a[j]+j;
                     for j:=x+1 to y do
                         begin
                             if a[j]>max then max:=a[j];
                             a[j]:=0;
                         end;
                end
                    else begin
                            for j:=1 to y do a[j]:=a[j]+j;
                            for j:=y+1 to x do a[j]:=j;
                         end;
             y:=x;
         end;
     for i:=1 to x do
         if a[i]>max then max:=a[i];
     writeln(max);
     close(input); close(output);
end.
阅读更多
版权声明:欢迎借鉴,谢绝抄搬。 https://blog.csdn.net/Gx_Man_VIP/article/details/60326235
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭