【CCF-CSP201312-3】最大的矩形

pre

AcWing 分享 由数据范围反推算法复杂度和算法内容

1. 题目要求

在这里插入图片描述
在这里插入图片描述

2. 解答

解答这个题目要注意到,最后画出的矩形,它的高度一定与题目中的某一个矩形的高度相同。于是题目等价转化为在图中可以画出多少个高度为 h e i g h t [ i ] height[i] height[i] 的连续矩形。
以图中 h e i g h t [ i ] height[i] height[i] 矩形为起始,向左找不低于它的矩形,向右找不低于它的矩形,得到它能画出的最大的矩形个数,乘以矩形高度就是最后的矩形的面积。迭代可以得到题目要求的最大矩形。

#include <iostream>
using namespace std;

int main()
{
	int n;
	scanf("%d", &n);

	int height[n];
	for(int i = 0; i < n; i ++) {
		scanf("%d", &height[i]);
	}
	int cnt = 1, max = 0;
	for(int i = 0; i < n; i ++) {
		for(int p = i - 1; p >= 0; p --)
			if(height[i] <= height[p]) cnt ++; else break;
		for(int q = i + 1; q < n; q ++)
			if(height[q] >= height[i]) cnt ++; else break;
		int res = cnt * height[i];
		if(res > max) max = res;
		cnt = 1;
	}
	
	printf("%d", max);
	return 0;
}

3. 总结

时间复杂度是 O ( n 2 ) O(n^2) O(n2),题目的数据范围最大是 1 0 3 10^3 103,所以可以接受平方级别的复杂度。
这一题还是模拟题。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页