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 }
  • 相关阅读:
    Oracle SQL语句收集
    SqlParameter In 查询
    SQL 性能优化
    Entity Framework
    【XLL API 函数】 xlfSetName
    【XLL API 函数】xlfUnregister (Form 2)
    【XLL API 函数】xlfUnregister (Form 1)
    【Excel 4.0 函数】REGISTER 的两种形式以及VBA等效语句
    【Excel 4.0 函数】REGISTER
    【Bochs 官方手册翻译】 第一章 Bochs介绍
  • 原文地址:https://www.cnblogs.com/QingHuan/p/6544987.html
Copyright © 2011-2022 走看看