概述
问题描述
试题编号: 201312-3
试题名称: 最大的矩形
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。
请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。
输入格式
第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。
第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔。(1 ≤ hi ≤ 10000)。hi是第i个矩形的高度。
输出格式
输出一行,包含一个整数,即给定直方图内的最大矩形的面积。
样例输入
6
3 1 6 5 2 3
样例输出
10
直接上代码:
// 计算最大矩形面积:暴力法(枚举法),使用双重循环,例举出所有情况,计算所有能组成矩形的面积
#include<iostream>
using namespace std;
int main()
{
//以一个为基准,一个向后推进,保存已求出的最大面积
int n=0, height = 0, ans = 0, area = 0,i=0,j=0;
cin >> n;
int* h = new int[n];//动态创建数组
for (i = 0; i < n; i++)
{
cin >> h[i];//输入每一个高度
}
for (i = 0; i < n; i++)
{//以第i个矩形为基准
height = h[i];
for (j = i; j < n; j++)
{//从j=i开始向后推进,若以j=i+1开始则没有单独算第i个矩形面积
//推进过程中所有的情况都会计算一遍
if (h[j] < height)
height = h[j];//以当前循环最小的高作为整个矩形的高
area = (j - i + 1) * height;
if (area > ans)
{
ans = area;//保存当前最大面积
}
}
}
cout << ans;
return 0;
}
最后
以上就是典雅跳跳糖为你收集整理的ccf试题最大的矩形c++实现的全部内容,希望文章能够帮你解决ccf试题最大的矩形c++实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复