CCF 201312-3 最大的矩形[比較簡單]
阿新 • • 發佈:2018-09-09
vector 輸出格式 data 空格 輸入格式 out rec 6.0 eight
問題描述
試題編號: | 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 3 1 6 5 2 3 樣例輸出 10 |
題目大意:有n個矩形,寬為1,給出每個點的高度,需要求出最大的矩形的面積。
//猛一看覺得挺難,仔細看看覺得還可以,一次AC~
#include <iostream> #include <vector> #include <cstdio> using namespace std; int rec[1001][1001]; int main() {int n; cin>>n; int maxs=0; for(int i=0;i<n;i++){ cin>>rec[i][i]; if(rec[i][i]>maxs)maxs=rec[i][i]; } for(int i=0;i<n;i++){ int mins=rec[i][i]; for(int j=i+1;j<n;j++){ rec[i][j]=min(mins,rec[j][j]); mins=rec[i][j]; } } int temp=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ //cout<<rec[i][j]<<" "; temp=(j-i+1)*rec[i][j]; if(temp>maxs)maxs=temp; } //cout<<‘\n‘; } cout<<maxs; return 0; }
1.有一個rec矩陣,對角線上表示只有當前矩形自己時的面積
2.從第一個依次往後遍歷,看能達到的最大高度(是有最低高度限制的)
3.然後再雙層循環,註意寬度是j-i+1,而不是j-i,這樣即可計算出寬*高=面積。
CCF 201312-3 最大的矩形[比較簡單]