最大的矩形(rec)

安徽省2016年信息学竞赛试题(小学组)

题目描述 Description

经过精心的计算,卡卡西终于帮助白胡子和黑胡子两位巫师分出了胜负,他们也遵守承诺打开了锁链。最终,卡卡西在四又四分之三号站台登上“和谐号”魔法快车,来到了世界魔法大学的门口。但此时她却惊讶地发现魔法大学被石头紧紧的裹住,转了一圈也没有发现大门,这是怎么回事呢?

原来,大学门口有一个很大的广场,而广场的顶部有着大小不一的长方形透光栅格,这些格子沿着屋顶的一侧整齐的排列着,它们的底部宽度一样,但是高度随着阳光照射的角度不同而时刻变化着,并在地上投影出变化着的影子,而这些影子所组成的直方图里面的最大矩形就是变化着的学校的大门-阴影之门,你能帮助卡卡西找出阴影之门的变化规律,准确说出阴影大门的面积,从而进入魔法学校么?

在横轴上放了n个相邻的矩形,每个矩形的宽度是w(所有矩形宽度一致),而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n 个矩形构成了一个直方图。

输入描述 Input Description

输入数据共两行,第一行包含两个正整数n 和w(空格隔开),分别表示矩形的数量和矩形的宽度。第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔,hi 是第i 个矩形的高度。

输出描述 Output Description

一个正整数,表示给定直方图内的最大矩形的面积。

样例输入 Sample Input

6 2

4 2 6 5 1 7

样例输出 Sample Output

20

数据范围及提示 Data Size & Hint

数据范围: 1 <= n <= 1000,1 <= hi <= 10000,1 <= w<= 100。

这道题使用枚举就可以轻松解决

代码:

#include<iostream>
using namespace std;
int n,w,h[1005];
int maxn;

int main() {
    cin>>n>>w;
    for(int i=1;i<=n;i++){
        cin>>h[i];
    }
    for(int i=1;i<=n;i++){
        int cnt=1;
        for(int j=i-1;j>=1;j--){
            if(h[j]>=h[i]){
                cnt++;
            }else{
                break;
            }
        }
        for(int j=i+1;j<=n;j++){
            if(h[j]>=h[i]){
                cnt++;
            }else{
                break;
            }
        }
        maxn=max(maxn,cnt*w*h[i]);
    }
    cout<<maxn;
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值