刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

题目描述:

(注.input()输入函数的括号中不允许添加任何信息)

编程实现:

工人砌了一面奇特的砖墙,该墙由N列砖组成(1≤N≤106),且每列砖的数量为Ki(1≤Ki≤104,相邻两列砖之间无缝隙),每块砖的长宽高都为1。

小蓝为了美化这面墙,需要在这面墙中找到一块面积最大的矩形用于涂鸦,那么请你帮助小蓝找出最大矩形,并输出其面积。

例如:N = 6,表示这面墙有6列,每列砖的数量依次为3、2、1、5、6、2,如下图:

图中虚线部分是一块面积最大的矩形,其面积为10。

输入描述

第一行输入一个正整数N(1≤N≤10^6),表示这面砖墙由几列砖组成

第二行输入N个正整数Ki(1≤Ki≤10^4),表示每列砖的数量,正整数之间以一个空格隔开

输出描述

输出一个正整数,表示最大矩形的面积


样例输入

6
3 2 1 5 6 2

样例输出

10

使用微信搜索喵呜刷题,轻松应对考试!

答案:

```pythonN = int(input())K = list(map(int, input().split()))heights = [0] * 10001max_height = 0max_area = 0for i in range(N):for j in range(K[i], 0, -1):heights[j] = max(heights[j], heights[j-1] + 1)max_area = max(max_area, j * heights[j])max_height = max(max_height, heights[j])print(max_area)```

解析:

【喵呜刷题小喵解析】:

本题是一道经典的动态规划问题,可以使用单调栈来解决。

首先,我们定义一个长度为10001的数组heights,用来表示高度,初始值为0。数组的下标对应每块砖的数量,数组的值对应该数量的砖堆的高度。

然后,我们遍历每一列砖,对于每一列砖,我们遍历其数量从多到少,更新heights数组的值。具体地,对于每个数量j,我们更新heights[j]为heights[j-1]+1和heights[j]的较大值,表示以第j块砖为底边的矩形的高度。同时,我们更新最大面积max_area为max_area和j*heights[j]的较大值,表示以第j块砖为底边的矩形的面积。

最后,我们输出最大面积max_area即可。

由于题目要求输入函数的括号中不允许添加任何信息,因此我们使用input()函数来获取输入,并使用map()函数将输入的字符串转换为整数列表。

注意,由于题目中砖的数量最大为10000,因此我们定义heights数组的长度为10001,以便处理数量为0的情况。
创作类型:
原创

本文链接:题目描述: (注.input()输入函数的括号中不允许添加任何信息) 编程实现: 工人砌了一面奇特的

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share