最大的矩形
来源:互联网 发布:安卓 模拟经营 知乎 编辑:程序博客网 时间:2024/05/22 16:43
问题描述
在横轴上放了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
算法:- 算法开始。
- 读入n。
- 依次读取n个数据,存储于array里。
- i=0。maxarea=0,height = 0,width = 0。
- 如果i小于n,则继续,否则跳到第十三步。
- j=i+1。height=array[i],width=1,如果maxarea<height * width,maxarea = height * width。
- 如果j小于n,则继续,否则跳到第十二步。
- 如果array[j]<height,则height=array[j]。
- width++。
- 如果maxarea < height * width,则maxarea = height * width。
- j++。回到第八步。
- i++。回到第五步。
- 输出maxarea。
- 算法结束。
#include <stdio.h>#include <stdlib.h>int main(int argc, const char * argv[]) { int n, *h = NULL, maxarea = 0, height, width, i, j; scanf("%d", &n); h = (int*)calloc(n, sizeof(int)); for(i = 0; i < n; i++){ scanf("%d", h + i); } for(i = 0; i < n; i++){ height = h[i]; width = 1; if(maxarea < height * width){ maxarea = height * width; } for(j = i + 1; j < n; j++){ if(h[j] < height){ height = h[j]; } width++; if(maxarea < height * width){ maxarea = height * width; } } } printf("%d", maxarea); return 0;}
0 0
- 最大的矩形
- 讨厌的最大矩形
- 最大的矩形
- 【ACM】最大的矩形
- CCF 最大的矩形
- CCF 最大的矩形
- 最大的矩形
- CSP最大的矩形
- 最大的矩形
- 最大的矩形
- CCF-最大的矩形
- 最大的矩形
- 最大的矩形
- 面积最大的矩形
- ccf最大的矩形
- 面积最大的矩形
- 最大的矩形
- 面积最大的矩形
- linux命令(二)free命令
- poj 1789--Truck History 最小生成树(prim)
- ToDo
- Opengl教程之 读取obj并绘制在picturecontrol控件内
- 深度信念网络Deep Belief Networks
- 最大的矩形
- 42个移动端启动页面优化技巧
- 【杭电oj】4505 - 小Q系列故事——电梯里的爱情(排序,水)
- typedef常见用法
- 一个普通程序员的中国梦
- Android Scroller使用详解
- 『C++ Primer学习笔记』Chapter 2
- 【杭电oj】1994 - 利息计算(水)
- js笔记(8)之数组篇