【CSP】最大的矩形

問題描述
試題編號: 201312-3
試題名稱: 最大的矩形
時間限制: 1.0s
內存限制: 256.0MB
問題描述:
問題描述
  在橫軸上放了n個相鄰的矩形,每一個矩形的寬度是1,而第i(1 ≤ i ≤ n)個矩形的高度是h i。這n個矩形構成了一個直方圖。例如,下圖中六個矩形的高度就分別是3, 1, 6, 5, 2, 3。



  請找出能放在給定直方圖裏面積最大的矩形,它的邊要與座標軸平行。對於上面給出的例子,最大矩形以下圖所示的陰影部分,面積是10。
輸入格式
  第一行包含一個整數n,即矩形的數量(1 ≤ n ≤ 1000)。
  第二行包含n 個整數h 1, h 2, … , h n,相鄰的數之間由空格分隔。(1 ≤ h i ≤ 10000)。h i是第i個矩形的高度。
輸出格式
  輸出一行,包含一個整數,即給定直方圖內的最大矩形的面積。
樣例輸入
6
3 1 6 5 2 3
樣例輸出
10
 
 
My Solution:
 1 #include <stdio.h>
 2 #include <iostream>
 3 using namespace std;
 4 
 5 int num[1001];
 6 int s[1001]; //面積
 7 
 8 int main()  {
 9     int n;
10     scanf("%d", &n);
11     for(int i = 0; i < n; i++)  {
12         scanf("%d", &num[i]);
13     }
14     for(int i = 0; i < n; i++)  {
15         int last = 0;
16         int middle = i;
17         int count = 0;
18         while(last < i) {
19             if(num[last] >= num[i]){
20                 count++;
21             }
22             else {
23                 count = 0;
24             }
25             last++;
26         }
27 
28         while(middle < n)   {
29             if(num[middle] >= num[i]){
30                 count++;
31             }
32             else{
33                 break;
34             }
35             middle++;
36         }
37         // cout << "count" << i << " " << count << endl;
38         s[i] = count * num[i];
39     }
40     int maxS = 0;
41     for(int i = 0; i < n; i++)  {
42         // cout << s[i] << endl;
43         if(s[i] > maxS) {
44             maxS = s[i];
45         }
46     }
47     
48     printf("%d\n", maxS);
49     
50     return 0;
51 }

 

標準答案:ios

 1 #include <iostream> 
 2 #include <cstdio>
 3 #include <string> 
 4 #include <vector> 
 5 #include <deque>
 6 #include <list>
 7 using namespace std;
 8 int main() {
 9     int n;
10     vector<int> a;
11     cin >> n;
12     for (int i = 0; i < n; i++) {
13         int x;
14         cin >> x; a.push_back(x);
15     }
16     int ans = 0;
17     for (int i = 0; i < n; i++) {
18         int h = a[i];
19         for (int j = i; j < n; j++) {
20             if (a[j] < h)
21                 h = a[j];
22             int s = (j - i + 1) * h; if (ans < s)
23                 ans = s; }
24         
25     }
26     cout << ans << endl;
27     return 0;
28 }
相關文章
相關標籤/搜索