java ccf最大的矩形_CCF-201312-3-最大的矩形

问题描述

试题编号:

201312-3

试题名称:

最大的矩形

时间限制:

1.0s

内存限制:

256.0MB

问题描述:

问题描述

在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。

0818b9ca8b590ca3270a3433284dd417.png   请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。

0818b9ca8b590ca3270a3433284dd417.png

输入格式

第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。   第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔。(1 ≤ hi ≤ 10000)。hi是第i个矩形的高度。

输出格式

输出一行,包含一个整数,即给定直方图内的最大矩形的面积。

样例输入

6 3 1 6 5 2 3

样例输出

10

解题思路:

从单个向两边搜索,比原来大的就+1,小的就停止

计算出以当前柱子为中心的面积之后与最终的结果取大值赋值给最终的结果

0818b9ca8b590ca3270a3433284dd417.png

源代码:

#include

#include

#include

#include

#include

using namespace std;

int main()

{

int n;

int ans[1005];

int res;

scanf("%d",&n);

memset(ans,0,sizeof(ans));

for(int i=1;i<=n;i++)

{

scanf("%d",&ans[i]);

}

res=0;

for(int i=1;i<=n;i++)

{

int cntl,cntr;

cntl=0;

cntr=0;

int pl,pr;

pl=i-1;

pr=i+1;

while(ans[pl]>=ans[i])

{

cntl++;

pl--;

}

while(ans[pr]>=ans[i])

{

cntr++;

pr++;

}

res=(cntl+cntr+1)*ans[i]>res?(cntl+cntr+1)*ans[i]:res;

}

printf("%d\n",res);

return 0;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值