http://blog.csdn.net/pipisorry/article/details/39434499
时间限制: 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
code:
//****************************************************************************************************/ //*CCF软件能力认证考试模拟题 —— 最大矩形Largest Rectangle in a Histogram poj2559<span style="white-space:pre"> </span>皮皮 2014-9-3*/ //****************************************************************************************************/ #include <iostream> #include <assert.h> using namespace std; /* ccf标准算法 TLE!!! */ //???????????????? static void largestRectangle(){ int n; //直方图柱形数目 cin>>n; int *height = new int[n]; for(int i = 0; i < n; i++) cin>>height[i]; long long sum, max = 0; for(int i = 0; i < n; i++){ int h = height[i]; for(int j = i; j < n; j++){ //向右扫描 if( height[j] < h ) //高度小时改为小的高度 h = height[j]; sum = (j - i +1) * h; //计算高度h的矩形面积 if(sum > max) //比原来大则替换 max = sum; } while( i < n - 1 && height[i+1] < height[i] ) //改进:比当前height[i]小的不用再计算(i后面高度比i小的不可能有更大面积的矩形) i++; } cout<<max<<endl; } static void largestRectangle1(){ int n; cin>>n; //while(n){ int *height = (int *)malloc(sizeof(int) * n); for(int i = 0; i < n; i++) cin>>height[i]; int j, k, sum, max = 0; for(int i = 0; i < n; i++){ sum = 1; //初始只有一个这样高度的 j = i - 1; k = i + 1; while(j >= 0 && height[j] >= height[i]){ //向左扫描同样高度的有多少个 sum++; j--; } while(k <= n - 1 && height[k] >= height[i]){ //向右扫描同样高度的有多少个 sum++; k++; } sum *= height[i]; <span style="white-space:pre"> </span>//计算高度为当前大小的直方柱有多少个(即矩形面积大小) if(sum > max) max = sum; } cout<<max<<endl; cin>>n;/* }*/ } int main(){ //assert( freopen("CCF\\largestRectangle1.in", "r", stdin) ); largestRectangle(); //fclose(stdin); return 0; }
from:http://blog.csdn.net/pipisorry/article/details/39434499
时间: 2024-10-13 11:45:13