CCF 201312-3 最大的矩形[比较简单]
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                CCF 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 | 
題目大意:有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,這樣即可計算出寬*高=面積。
轉載于:https://www.cnblogs.com/BlueBlueSea/p/9612476.html
總結
以上是生活随笔為你收集整理的CCF 201312-3 最大的矩形[比较简单]的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: IMX8 资料记录
- 下一篇: Python入门:局部变量与全局变量2
