描述:
在X轴上水平放置着 N 个条形图,这 N 个条形图就组成了一个柱状图,每个条形图都是一个矩形,每个矩形都有相同的宽度,均为1单位长度,但是它们的高度并不相同。 例如下图,图1包含的矩形的高分别为2,1,4,5,1,3,3 单位长度,矩形的宽为1单位长度。
你的任务就是计算柱状图中以X轴为底边的最大矩形的面积。图2阴影部分就是上述例子的最大矩形面积。
思路:
我们可以利用暴力破解来解决该题,某一点开始向他的两个方向开始搜索,看看他能向两边延伸到多长的距离,最后就是该长度乘以该点的高度即可。
实现代码:
01 | #include <iostream> |
02 | #include"stdio.h" |
03 |
04 | #define N 100005 |
05 | #define INF 999999999 |
06 |
07 | using namespace std; |
08 |
09 | int Len[N]; |
10 | long long ans,Max; |
11 |
12 | int main() |
13 | { |
14 | int n,i,j; |
15 | int ls,rs; |
16 |
17 | while(scanf("%d",&n)==1&&n) |
18 | { |
19 | ls=rs=0; |
20 | ans=-INF; |
21 |
22 | for(i=0;i<n;i++) |
23 | { |
24 | scanf("%d",&Len[i]); |
25 | } |
26 |
27 | for(i=0;i<n;i++) |
28 | { |
29 | ls=rs=0;//分别能向左边ls,右边rs两端能够扩展的最大长度 |
30 |
31 | for(j=i-1;j>=0;j--) |
32 | { |
33 | if(Len[j]>=Len[i]) |
34 | { |
35 | ls++; |
36 | } |
37 | else |
38 | { |
39 | break; |
40 | } |
41 | } |
42 |
43 | for(j=i+1;j<=n;j++) |
44 | { |
45 | if(Len[j]>=Len[i]) |
46 | { |
47 | rs++; |
48 | } |
49 | else |
50 | { |
51 | break; |
52 | } |
53 | } |
54 |
55 | Max=(ls+rs+1)*Len[i]; |
56 |
57 | if(ans<Max) |
58 | ans=Max; |
59 | } |
60 |
61 | cout<<ans<<endl; |
62 | } |
63 |
64 | return 0; |
65 | } |
本文介绍了一种通过暴力破解的方法来解决寻找柱状图中最大矩形面积的问题,包括实现代码和具体步骤。

994

被折叠的 条评论
为什么被折叠?



