CCF认证模拟之最大的矩形
2016-08-14 18:41
183 查看
引言
Today is A good day!心情大好,所以连发博客,记录一下自己苦苦鏖战准备CCF的血泪史ᕙ[・・]ᕗ好,这篇是官网模拟题的第三题,最大的矩形题目
问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。 请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。 输入格式 第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。 第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔。(1 ≤ hi ≤ 10000)。hi是第i个矩形的高度。 输出格式 输出一行,包含一个整数,即给定直方图内的最大矩形的面积。 样例输入 6 3 1 6 5 2 3 样例输出 10
解题思路
这个解决起来还是比较棘手的。关键在于怎么样才能获取到最大的那个矩形==。为了这个,我也是纠结了老半天,最后没办法只好看看网上大神怎么说。最后在结合了几篇博文的深入骨髓的洗礼之后,偶终于懂得了这道题的精华所在,特此记录下来。这个算法的思路是这样的,也算是一种穷举算法(但穷举之外还隐含着分治的思想)吧:以某个矩形为基础,分两个方向(分治)遍历,只要找到比它自己的面积大的矩形就继续遍历,因为这样才能最终得到最大的矩形。如果找到的矩形面积比它自己小,就break;如此以来最后最大的矩形面积就是这个矩形的高 * 遍历的宽度(这个宽度当然是前后两个方向遍历的总宽度width)。 当然对每个矩形都需要做相同的遍历,最后取最大的。代码
截图:OK
这样子就好啦,把类名改成Main,提交,第三个“100分”到手!!!♪(´ε`)
相关文章推荐
- CCF认证 2013-12 最大的矩形
- CCF 模拟C 找最大矩形+输入输出外挂
- CCF模拟试题-最大的矩形
- CCF计算机软件能力认证模拟试题-最大的矩形(Java参考答案学习记录)
- ccf认证模拟题之三---最大的矩形
- CCF认证-最大的矩形
- 最大的矩形
- 最大矩形求解问题(单调递减栈)
- HDU 1506 Largest Rectangle in a Histogram 最大矩形的面积
- 直方图中的最大矩形
- uva 10827 球面最大子矩形
- LeetCode 84. Largest Rectangle in Histogram(直方图最大矩形)
- [LeetCode]Maximal Rectangle寻找最大矩形
- 直方图内最大矩形
- 寻找直方图中最大矩形
- CCF—最大的矩形 20131203
- 直方图最大矩形问题(Largest Rectangle in Histogram)
- 在01矩阵中找最大1矩形
- CCF201312-3 最大的矩形(100分)
- POJ 2559 最大矩形。。