CCF201312-3 最大的矩形(解法二)(100分)(废除!!!)
试题编号: | 201312-3 |
试题名称: | 最大的矩形 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述
在横轴上放了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
|
问题链接:CCF201312试题。
问题描述:首先输入正整数n,接着输入n个正整数表示直方图的一个高度,计算这些直方图中的最大矩形面积。
问题分析:解决这个问题,一种是用暴力法(枚举法)来解决,任何一个矩形必然始于第i个直方图,终止于第j块直方图(i<=j),从所有这些面积中找出最大矩形面积即可;另外一种办法是对这n个数只看一遍,就算出最大矩形面积,其计算复杂度为O(n),相比较而言,算法要复杂一些,还需要付出空间的代价。仔细观察这两个算法有关的程序,会发现其实二者之间算法复杂度的差异很小。
程序说明:本程序采用后一种方法实现。基本思想是先找到一个逐步递增的面积,即如果Hi<Hi+1则最大面积是逐步递增的。这个过程中,将这些Hi放入堆栈中,直到不满足Hi<Hi+1为止。这个时候,最大的面积可能是最右边是Hi,由若干块(也可能只有1块)拼成的,从中获得一个最大的面积。出现面积非递增时,则把堆栈中比当前高的直方图弹出,重复上述过程,需要说明的是这不影响高的直方图与其右边连成一片。还有一点就是,所有的直方图的高度Hi>=1,这是一个前提,如果有的直方图高度为0,则这个算法需要另外设计。
参见:CCF201312-3 最大的矩形(100分)。
提交后得100分的C++语言程序如下:
/* CCF201312-3 最大的矩形 */#include <iostream>
#include <stack>using namespace std;const int N = 1000;
int h[N+1];int main()
{int n, ans=0, area, temp;// 输入数据cin >> n;for(int i=0; i<n; i++)cin >> h[i];h[n] = 0;// 计算最大矩形面积stack<int> s;for(int i=0; i<=n; i++) {if (s.empty() || h[s.top()] < h[i])s.push(i);else {temp = s.top();s.pop(); //弹出area = h[temp] * (s.empty() ? i : i - s.top() - 1);if (area > ans)ans = area;--i;}}// 输出结果cout << ans << endl;return 0;
}
CCF201312-3 最大的矩形(解法二)(100分)(废除!!!)相关推荐
- 6-2 综合成绩排名-结构体二 (100分)
6-2 综合成绩排名-结构体二 (100分) 众所周知,计算机院要对申请转入计算机大类的学生进行考核,考核方式包括机试和面试.学生综合成绩采取百分制,其中50%由机试成绩核算,另50%由学生已获得的加 ...
- HDU1106 排序(解法二)(废除!!!)
本文废除!!! 请点击以下的参考链接!!! 参考链接:HDU1106 排序[字符串+整数+排序]. 问题链接:HDU1106 排序. 问题简述:参见上述链接. 问题分析:这个程序的逻辑并不十分复杂,主 ...
- HDU2502 月之数(解法二)【废除!!!】
本文废除,参见以下链接. 参考链接:HDU2502 月之数[递推] 月之数 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/ ...
- HDU4607 Park Visit(解法二)【废除!!!】
本文废除!!! 参见链接:HDU4607 Park Visit[DFS] 问题链接:HDU4607 Park Visit. 题意简述:莱克尔和她的朋友到公园玩,公园很大也很漂亮.公园包含n个景点通过n ...
- HDU1013 POJ1519 Digital Roots(解法二)【废除!!!】
本文废除!!! 参见链接:HDU1013 POJ1519 UVALive2085 Digital Roots[数根+水题] 该问题的最佳解法是利用数论的9余数定理来计算数根.一个数的数根等于该数的9的 ...
- HDU1164 Eddy's research I(解法二)【废除!!!】
本文废除,参见以下参考链接: 参考链接:HDU1164 Eddy's research I[素因子分解+筛选法+欧拉函数] 问题链接:HDU1164 Eddy's research I 问题描述:参见 ...
- UVALive5461 UVA615 POJ1308 Is It A Tree?(解法二)【废除!!!】
本文废除!!! 参考链接:UVALive5461 UVA615 POJ1308 ZOJ1268 Is It A Tree?[并查集] Regionals 1997 >> North Ame ...
- POJ1338 Ugly Numbers(解法二)【废除!!!】
本文废除!!! 参考链接:POJ1338 Ugly Numbers[水题] 问题链接:POJ1338 Ugly Numbers.基础级练习题,用C语言编写程序. 题意简述:不能被2.3和5以外的素数整 ...
- HDU1234 开门人和关门人(解法二)【废除!!!】
本文废除!!! 参考链接:HDU1234 开门人和关门人 问题链接:HDU1234 开门人和关门人. 问题简述:参见上述链接. 问题分析:之前所做的程序质量不高,所以重做该题的题解.上次使用了结构数组 ...
- HDU2072 单词数(解法二)【废除!!!】
本文废除!!! 参考链接:HDU2072 单词数[水题] 问题链接:HDU2072 单词数. 问题描述:参见上文. 问题分析:这是一个比较简单的问题,一行一行读入字符串,统计该行有几个单词.单词之间只 ...
最新文章
- oracle 查询本周数据生成下周数据
- java中的权限修饰符_Java的权限修饰符的区别和用法总结
- python一箭穿心代码怎样复制,Python Decimal copy_sign()用法及代码示例
- 《移动应用开发》作业——HTML、CSS
- swift和oc区别----属性部分(参考官方swift2.1文档)
- HLS_error implicit instantiation of undefined template ‘ssdm_int
- Windows下源码获取
- c#中connect函数_Flink算子使用方法及实例演示:union和connect
- 【tyvj3303】连接格点,区分多维与单维很关键
- 【安全】通过LAM(ldap-account-manager)来管理OpenLDAP
- 帆软报表使用及设置日志打印sql
- dockerfile入门
- 云计算与大数据技术 第一章
- Linux如何固定ip地址,及ifcfg-ens33文件参数
- 宝宝专业智力测试软件,儿童医院心理科做智商检测-儿童智力测试仪_儿童注意力测试仪_儿童综合素质测试仪/测评系统...
- js实现复制图片到剪切板下载图片
- 在iPhone上使用3D Touch
- noi题库c语言 1.5答案,NOIP2004提高组复赛试题答案c语言版
- 【HTML5】Web前端——网页实用技巧1:将一个方形图片,变成圆形(利用CSS属性)
- 计算机学院论文谢辞怎么写,论文致谢:函授毕业论文谢辞怎么写