zoukankan      html  css  js  c++  java
  • 【CSP】最大的矩形

    问题描述
    试题编号: 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
     
     
    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
    ", maxS);
    49     
    50     return 0;
    51 }

    标准答案:

     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 }
  • 相关阅读:
    判断以下字符串中出现次数最多的字符,并且算出该字符出现的次数
    status的状态码
    call和apply的区别?
    闭包
    $(document).ready和window. onload的区别
    python_pandas常用操作
    python经典例题
    爬B站并保存成csv文件。提供数据
    data_analysis:初识numpy
    01爬取豆瓣网电影数据进行numpy的练习
  • 原文地址:https://www.cnblogs.com/QingHuan/p/6544987.html
Copyright © 2011-2022 走看看