CCF认证模拟之最大的矩形

来源:互联网 发布:nike官网抢鞋软件 编辑:程序博客网 时间:2024/05/21 18:00

引言

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个矩形的高度。输出格式  输出一行,包含一个整数,即给定直方图内的最大矩形的面积。样例输入63 1 6 5 2 3样例输出10

这里写图片描述

这里写图片描述

解题思路

这个解决起来还是比较棘手的。关键在于怎么样才能获取到最大的那个矩形==。为了这个,我也是纠结了老半天,最后没办法只好看看网上大神怎么说。最后在结合了几篇博文的深入骨髓的洗礼之后,偶终于懂得了这道题的精华所在,特此记录下来。这个算法的思路是这样的,也算是一种穷举算法(但穷举之外还隐含着分治的思想)吧:以某个矩形为基础,分两个方向(分治)遍历,只要找到比它自己的面积大的矩形就继续遍历,因为这样才能最终得到最大的矩形。如果找到的矩形面积比它自己小,就break;如此以来最后最大的矩形面积就是这个矩形的高 * 遍历的宽度(这个宽度当然是前后两个方向遍历的总宽度width)。 当然对每个矩形都需要做相同的遍历,最后取最大的。

代码

  • 截图:
    这里写图片描述

OK

这样子就好啦,把类名改成Main,提交,第三个“100分”到手!!!
♪(´ε`)

0 0
原创粉丝点击