码迷,mamicode.com
首页 > 其他好文 > 详细

相邻最大矩形面积的问题

时间:2015-11-25 00:21:25      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:

 

9715 相邻最大矩形面积

时间限制:1000MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 编程题   语言: G++;GCC;VC;JAVA

 

Description

在X轴上水平放置着 N 个条形图,这 N 个条形图就组成了一个柱状图,每个条形图都是一个矩形,每个
矩形都有相同的宽度,均为1单位长度,但是它们的高度并不相同。
例如下图,图1包含的矩形的高分别为2,1,4,5,1,3,3 单位长度,矩形的宽为1单位长度。
技术分享
你的任务就是计算柱状图中以X轴为底边的最大矩形的面积。图2阴影部分就是上述例子的最大矩形面积。



输入格式

输入数据的第一行是一个整数 N(1≤ N ≤100000),表示柱状图包含 N 个矩形。
紧接着 N 个整数h1,...,hn(0≤ hi ≤20000, 1≤ i≤ N),表示柱状图中按从左到右顺序给出的矩形
的高度。矩形的宽度为1。   


输出格式

输出一个整数S,表示以X轴为底边的最大矩形的面积。


 

输入样例

7
2 1 4 5 1 3 3


 

输出样例

8


 

提示

这个问题,用简单的方法分析,寻找相邻几个矩形竖条最矮个构成的大矩形。O(n^2)的算法是比较容易实现的。

 




技巧:判断每一个点能向两边延伸多长,计算最大值,不断更新就行了

技术分享
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 4 {
 5     int n,left,right,max=0,i,j,x,a[10005];
 6   scanf("%d",&n);
 7   for(i=1;i<=n;i++)
 8         scanf("%d",&a[i]);
 9   for(i=1;i<=n;i++)
10   {
11       left=right=i;
12       x=1;
13       for(j=left-1;j>=1;j--)
14       {
15           if(a[j]>=a[i])
16             x++;
17           else
18             break;
19       }
20       for(j=right+1;j<=n;j++)
21       {
22           if(a[j]>=a[i])
23             x++;
24           else
25             break;
26       }
27       if(x*a[i]>max)
28         max=x*a[i];
29   }
30   printf("%d",max);
31   return 0;
32 }
View Code
            

 

相邻最大矩形面积的问题

标签:

原文地址:http://www.cnblogs.com/kevensusu/p/4993365.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!