1. 程式人生 > >201312-3最大的矩形

201312-3最大的矩形

一、原題

問題描述

試題編號: 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

二、解答

這是一道簽到題,雖然是第三題但是沒有難度。可是如此簡單的題目用了30分鐘是不應該的。第一次編譯出錯,沒有iostream和std,第二次編譯出錯,沒有stdio,第三次提交發現了自己邏輯錯誤,因為不一定矩形中最矮的在矩形的兩邊,因此漏解。第四次是因為沒有定義k。第五次就對了。

#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
int i,j,k;
int arr[1000];
for(i=0;i<n;i++){
cin>>arr[i];
}
int smax=0;
for(i=0;i<n;i++){
int height=arr[i];
int width=1;
for(j=i+1;j<n;j++){
if(arr[j]<height){
break;
}
}
for(k=i-1;k>=0;k--){
if(arr[k]<height){
break;
}
}
width=j-k-1;
if(height*width>smax){
smax=height*width;
}
}
cout<<smax;
return 0;
}