CCF201312-3 最大的矩形(100分)

CCF201312-3 最大的矩形(100分)

2017年02月02日 05:44:24

阅读数:2484

试题编号: 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

问题链接:CCF201312试题

问题描述:

首先输入正整数n,接着输入n个正整数表示直方图的一个高度,计算这些直方图中的最大矩形面积。(详见原问题,点击上面的链接)。

#include<cstdio>
#include<iostream>
#include<vector>
#include<string>
#include<cstring>
using namespace std;
const int N = 1003;
int a[N];

int main(){
    int n;
    while(cin>>n){
        for(int i =0  ;i < n;++i){          //输入数据
            cin>>a[i];
        }
        int ans = -1;                  //先设置最终答案ans为-1
        for(int i = 0 ; i< n;++i){          //对于每个元素a[i]
            int low = a[i];              //当前最小值low设置为a[i]
            for(int j =  i ; j < n;++j){       //对于i后面的每个元素
                if(low > a[j])            //如果a[j] 比 当前设置的最小值还要小,那么最小值设置为a[j]
                    low = a[j];
                int temp = (j - i + 1) * low;      //设置标记变量temp 为这段区间中的总和
                if(temp > ans)              
                    ans = temp;
            }
        }
        cout<<ans<<endl;
    }
return 0;
}

原文地址:https://www.cnblogs.com/dshn/p/9409702.html

时间: 2024-10-15 23:06:30

CCF201312-3 最大的矩形(100分)的相关文章

FastReport中的frxRichView如何设置二种不同的字体 [问题点数:100分,结帖人LIULIVERYOK]

FastReport中的frxRichView如何设置二种不同的字体 [问题点数:100分,结帖人LIULIVERYOK] 在frxRichView中有几段文字,如何给第一段文字设置不同的字体? 感激大虾们能给下答案!!! 来源:http://bbs.csdn.net/topics/390952125?page=1 解答: frxReport1->LoadFromFile(L"D:\\ccrun\\123.fr3"); TfrxRichView *f = (TfrxRichVie

擦边上100分,我的托福考试总结

我英语底子比较差,高考英语还不到130,四级499,六级擦着及格线过.因为在国内读研究生,所以没有计划出国,而报托福考试只是单纯想激励自己学习英语. 考试时间:2015年2月1日 地点:北京汇佳私立学校 分数:阅读26,听力27,口语23,写作26,总分102 这是我的复习安排: 一.背单词,做听写(大约提前1年开始) 关于背单词,推荐背纸质书,不推荐用网站或app.我原本也不习惯背纸质单词书,买过一本张红岩老师的<词以类记>,但是一直断断续续地背,直到考试了也才背了不到2遍,网站或app多方

100分程序员的8个习惯

慎于说 Yes 在没有搞清楚开发需求.任务工作量.团队期望值之前,100 分的程序员不会轻易答应.特别是对于新人来说,比较急于表现自己,对于同事或者老板的工作安排来者不拒,精神可嘉,方法不可取.承诺太多,会出现自己无法按时完成的情况,即使按时完成,也可能没有达到别人的期望值,长期以往别人对你的失望会越来越多.所以推荐的做法是在接受任务时,多问几个为什么,哪怕招人烦也问题不大,把要做的事情弄清楚,和同事和领导多交流明白,之后再说 Yes 也不迟. 敢于说 No 看起来和第一条雷同,其实细究起来不一

(很难啊)如何实时获取DBGrid 中当前单元格输入的内容? [问题点数:100分,结帖人yifawu100]

如何获取DBGrid 中当前单元格输入的内容? 还没输入完成,我想实时获取 Cell中的内容,以便作其他处理,用什么事件呢? 所以Field的Onchange事件是没用的. DBGrid1.SelectedField.AsStringDBGrid1.SelectedField.Text看你需要选择 这个问题简单啊,每输入1个数据的后就提交(并不是提交到数据库,还是在编辑状态),那么用DataSet就可以取值了用DBGrid的KeyUp事件: procedure TForm1.DBGrid1Key

键盘录入学生的成绩,将100分划分四个等级,优.良.及.不及。输出对应的等级,要有容错处理

1 import java.util.InputMismatchException; 2 import java.util.Scanner; 3 4 /* 5 键盘录入学生的成绩,将100分划分四个等级,优.良.及.不及.输出对应的等级,要有容错处理 6 */ 7 public class Demo { 8 public static void main(String[] args){ 9 Scanner sc = new Scanner(System.in); 10 try { 11 whil

Coursera Algorithms Programming Assignment 4: 8 Puzzle (100分)

题目原文:http://coursera.cs.princeton.edu/algs4/assignments/8puzzle.html 题目要求:设计一个程序解决8 puzzle问题以及该问题的推广,例如8-puzzle是3*3,程序要能解决n*n的同类问题(2 ≤ n < 128) 典型的8 puzzle如下: 算法设计参照A*搜索算法,即使不了解A*搜索算法,题目也已经将解法解释的很具体了. Best-first search:设计参照A* 搜索算法.定义一个 search node类,包

求助一个问题,100分,我也没多少分了。

============问题描述============ 我在写一个图片压缩的方法,因为要上传到服务器,所以图片不可以过大. 网上的这些方法也都烂了,可是都不怎么管用.比如我现在使用的. 我在这个循环里设置了,如果baos.toByteArray().length / 1024>50成立,就继续压缩. 可是我设置段点之后,发现baos.toByteArray().length / 1024已经运行到小于50了,然后返回这个bitmap.当我上传到服务器的时候,图片竟然是二三百K,我想问问大家有没

ListView中用鼠标拖动各项上下移动的问题。(100分)

在OnDragDrop事件中處理:以下是delphi的例子 procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); beginAccept := Source is TLabel; end; This OnDragDrop event handler implements the drop behavior. procedu

CCF(除法):线段树区间修改(50分)+线段树点修改(100分)+线段树(100分)

除法 201709-5 这道题有很多种方法来做,最常用的就是线段树和树状数组. 如果使用线段树来做,就会想到区间修改的update函数.但是这里可能会涉及到v是1或者a[j]是0的情况,所以用这种方法会超时,最多50分. 可以修改一下代码,使用点修改来做这道题.在main函数里面增加一个循环,用来判断. 当然,还有一种方法就是树状数组,这种方法和上面这种方法运行时间相差无几,但是代码量大大减少. 需要注意的是,如果v是long long型,最好不要用scanf %lld的方式读入,否则超时. 使