Maximal submatrix(直方图最大矩阵)
Maximal submatrix
原题链接
先预处理出每个点的高度,对于每一行而言就是一个直方图。然后利用单调栈对于每一行求出面积最大的矩阵,其实就和最大面积全 111 矩阵问题是一样的。原理都是,对于一个直方图而言,其面积最大的矩阵的高度一定会卡在某个横坐标的上限,不然的话一定会有面积更大的矩阵,也就是不然高度一定可以往上涨。基于这个原理,我们就去遍历横坐标,假设高度上限在这,然后计算出向左向右最多能扩张到哪里,这里就要利用单调栈了。然后最后对于每个横坐标我们都求出了以此为上限的最大可能面积,答案就肯定是这其中的 MaxMaxMax 了。
#include <bits/stdc++.h>using namespace std;int n, m, Max;
int a[2003][2003];
int h[2003][2003];
int l[2003], r[2003];
stack<int> s;int main() {#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
#endifint T;scanf("%d", &T);while(T--) {Max = 0;scanf("%d%d", &n, &m);for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) {scanf("%d", &a[i][j]);}}for (int j = 1; j <= m; ++j) h[1][j] = 1;for (int i = 2; i <= n; ++i) {for (int j = 1; j <= m; ++j) {h[i][j] = a[i][j] >= a[i - 1][j] ? h[i - 1][j] + 1 : 1;}}for (int i = 1; i <= n; ++i) {while(!s.empty()) s.pop();for (int j = 1; j <= m; ++j) {while(!s.empty() && h[i][j] <= h[i][s.top()]) s.pop();if (s.empty()) l[j] = 1;else l[j] = s.top() + 1; s.push(j);}while(!s.empty()) s.pop();for (int j = m; j >= 1; --j) {while(!s.empty() && h[i][j] <= h[i][s.top()]) s.pop();if (s.empty()) r[j] = m;else r[j] = s.top() - 1;s.push(j);Max = max(Max, h[i][j] * (r[j] - l[j] + 1));}}printf("%d\n", Max);}
}
Maximal submatrix(直方图最大矩阵)相关推荐
- H - Maximal submatrix HDU - 6957
H - Maximal submatrix HDU - 6957 题意: 给定一个n行m列的矩阵,求每列上面积不减的最大子矩阵 对于每个测试用例,打印一个表示最大子矩阵的整数 题解: 要求求一个最大面 ...
- 【HDOJ6957】Maximal submatrix(单调栈,最大子矩阵面积)
1008 Maximal submatrix 题意: 给出一个n*m的矩阵,求一个面积最大的子矩阵满足子矩阵的每一列都是单调不递减的 思路: 转化为01矩阵 每个位置1代表该位是否比上面一位小,然后用 ...
- Maximal submatrix
杭电多校 Problem Description Given a matrix of n rows and m columns,find the largest area submatrix whic ...
- 【leetcode】85. Maximal Rectangle 0/1矩阵的最大全1子矩阵
1. 题目 Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1 ...
- 01矩阵最大正方形面积、01矩阵最大矩形面积、直方图最大矩形面积
01矩阵最大正方形面积 题意:给定一个矩阵,其中的元素为0或者1,要求找出其中元素全为1的面积最大的正方形. 题解:动态规划:对每个元素,把以其为右下角,元素全为1的正方形的最长边长记录下来.如果以元 ...
- OpenCV之imgproc 模块. 图像处理(4)直方图均衡化 直方图计算 直方图对比 反向投影 模板匹配
直方图均衡化 目标 在这个教程中你将学到: 什么是图像的直方图和为什么图像的直方图很有用 用OpenCV函数 equalizeHist 对图像进行直方图均衡化 原理 图像的直方图是什么? 直方图是图像 ...
- OpenCV中直方图的计算和绘制
OpenCV中直方图的计算和绘制 主要记录一下几个关键的API: cvRound(输入一个浮点数 );//返回一个整型数,取整的方法为四舍五入 split(输入多通道图像,数组或者vector变量. ...
- 算法学习——剑指 Offer II 040. 矩阵中最大的矩形(Java实现)
1. 题意 这是LeetCode上的 [040,矩阵中最大的矩形],难度为 [困难] 2. 思路分析 这道题跟上一题一样还是求最大矩形的面积,所以求最大矩形的面积可以参考直方图的最大矩形面积,那么这道 ...
- opencv直方图该怎么画
图像直方图是反映图像中像素分布特性的统计表,一般显示如下: 其中横坐标代表的是图像像素的种类,或者说是灰度级,纵坐标代表的是每一级灰度下像素数或者该灰度级下像素数在所有图像总像素数总所占的百分比. 直 ...
最新文章
- JVM内存调优原则及几种JVM内存调优方法
- php 字符串去html,PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
- IDC:聚焦6+6,抓住数字化转型商机
- 一键多功能按键识别c语言,单片机一键多功能按键识别设计
- Linux用户管理案例(第二版)
- iscsi存储常见错误
- imutils.path
- 修改js版本_啥都学点之使用nvm安装Node.js并实现Node.js多版本管理
- rsync替换cp命令显示速度和进度
- 最新Android开发视频教程 Android Studio教程(2017-2018-2019)
- 怎样把计算机网络共享给手机,怎么把电脑网络共享给手机
- 3DMax2021建模入门篇
- Android 系统自带图片裁剪功能(适配7.0、8.0、对了还有小米手机)
- 计算机专业课838,838计算机科学专业基础综合.docx
- 什么是蜜罐?底层原理是什么?
- OpenGL ES总结(一)OpenGL 初识
- JVM调优总结(1)
- bzoj3238 [Ahoi2013]差异 后缀自动机
- mj评[杜拉拉升职记]-8.5分
- 大数据-Hadoop(环境搭建)