UVa 836 - Largest Submatrix
题目:给你一个n*n的01矩阵,求里面最大的1组成的矩形的米娜及。
分析:dp。单调队列。UVa 1330同题,仅仅是输入格式变了。
我们将问题分解成最大矩形。即求解以k行为底边的图形中的最大矩形。然后合并。求最大的矩形。
预处理: 求出以每行为底边的每一列从底边開始向上的最大连续1的高度MaxH。
O(N^2) ;
dp:对于每一层底边。我们利用单调队列求解出本行的最大矩形。 O(N)。
关于单调队列的求解分析,可參照zoj1985的题解;
整体时间:T(N) = O(N^2)+O(N)*O(N) = O(N^2)。
说明:注意数据读入格式。
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio> using namespace std; char maps[30][30];
char Maps[30][30];
int MaxH[30][30];
int L[30],R[30];
int MUQ[30]; int main()
{
int T;
scanf("%d",&T);getchar();
for (int t = 1 ; t <= T ; ++ t) {
scanf("%s",maps[0]);
int n = strlen(maps[0]);
for (int i = 1 ; i < n ; ++ i)
scanf("%s",maps[i]);
for (int i = 1 ; i <= n ; ++ i)
for (int j = 1 ; j <= n ; ++ j)
Maps[i][j] = maps[i-1][j-1]; //计算每条底边上的每列高度
memset(MaxH, 0, sizeof(MaxH));
for (int i = 1 ; i <= n ; ++ i)
for (int j = 1 ; j <= n ; ++ j)
if ( Maps[i][j] == '1' )
MaxH[i][j] = MaxH[i-1][j]+1;
else
MaxH[i][j] = 0; for (int i = 1 ; i <= n ; ++ i)
MaxH[i][0] = MaxH[i][n+1] = -1; int MaxV = 0;
for (int i = 1 ; i <= n ; ++ i) {
//计算每一个点的左边界
int tail = 0;
MUQ[0] = 0;
for (int j = 1 ; j <= n+1 ; ++ j) {
while (tail >= 0 && MaxH[i][MUQ[tail]] > MaxH[i][j])
R[MUQ[tail --]] = j;
MUQ[++ tail] = j;
}
//计算每一个点的右边界
tail = 0;
MUQ[0] = n+1;
for (int j = n ; j >= 0 ; -- j) {
while (tail >= 0 && MaxH[i][MUQ[tail]] > MaxH[i][j])
L[MUQ[tail --]] = j;
MUQ[++ tail] = j;
}
//求解
for (int j = 1 ; j <= n ; ++ j) {
int Temp = MaxH[i][j]*(R[j]-L[j]-1);
if (MaxV < Temp)
MaxV = Temp;
}
}
printf("%d\n",MaxV);
if (t < T) printf("\n");
} return 0;
}
UVa 836 - Largest Submatrix的更多相关文章
- UVa 10667 - Largest Block
题目大意:这个也是和UVa 836 - Largest Submatrix差不多,修改一下数据就可以套用代码的. #include <cstdio> #include <cstrin ...
- Largest Submatrix(动态规划)
Largest Submatrix Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- POJ-3494 Largest Submatrix of All 1’s (单调栈)
Largest Submatrix of All 1’s Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 8551 Ac ...
- hdu 2870 Largest Submatrix(平面直方图的最大面积 变形)
Problem Description Now here is a matrix with letter 'a','b','c','w','x','y','z' and you can change ...
- Largest Submatrix of All 1’s
Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is the largest? By largest we m ...
- codeforces 407D Largest Submatrix 3
codeforces 407D Largest Submatrix 3 题意 找出最大子矩阵,须满足矩阵内的元素互不相等. 题解 官方做法 http://codeforces.com/blog/ent ...
- Largest Submatrix of All 1’s(思维+单调栈)
Given a m-by-n (0,1)-matrix, of all its submatrices of all 1's which is the largest? By largest we m ...
- POJ 3494 Largest Submatrix of All 1’s 单调队列||单调栈
POJ 3494 Largest Submatrix of All 1’s Description Given a m-by-n (0,1)-matrix, of all its submatrice ...
- POJ - 3494 Largest Submatrix of All 1’s 单调栈求最大子矩阵
Largest Submatrix of All 1’s Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is ...
随机推荐
- ZOJ Goldbach 2013年长沙赛区网络赛
迟到了一天的AC.... 思路: 先把单个素数 或着 两个素数能组成的情况预处理一下,然后对于给出的 n,拿第三个素数去和两个素数的情况匹配,最后要注意去重. 详情见代码. 因为手残少敲了一个 els ...
- Unity目录结构
http://www.cnblogs.com/liudq/p/5540051.htmlUnity中有几个默认目录 Unity5.x Resources 项目中默认的资源路径,会直接打包到游戏包中.即使 ...
- boost 定时器.
#include <iostream> #include <boost/asio.hpp> int main() { boost::asio::io_service io; b ...
- Qt Assistant 工作机制
Qt Assistant 是Qt 的助手,我们在看帮助的时候要用到的,它可以记住上一次你访问的位置. 1. 所以在你调用Qt Assistant为我们自己的程序写help的时候要记得修改qhcp配 ...
- [HeadFirst-JSPServlet学习笔记][第二章:高层概述]
第二章:高层体系结构 容器 1 什么是容器? servelet没有main()方法.它们受控于另一个Java应用,这个Java应用称为容器(Container) Tomcat就是这样一个容器.Web服 ...
- NPOI通过DataTable导出和读取Excel
Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题: 导出问题: 如果是asp.net,你得 ...
- hdu1161Eddy's mistakes
Problem Description Eddy usually writes articles ,but he likes mixing the English letter uses, for e ...
- MySQL 初学笔记 ① -- MySQL用户登录权限控制
1. MySQL 登录 MySQL -u username -p 2. MySQL 创建用户 use mysql //进入mysql 表 INSERT INTO user (Host,User,Pas ...
- toJOSN()方法
toJSON方法可以作为函数过滤器的补充.序列化的顺序如下: (1)如果存在toJSON方法而且能够通过它取得有效值,则调用该方法. (2)如果提供了第二个参数,应用该函数过滤器.传入过滤器的值是步骤 ...
- JS创建类和对象(好多方法哟!)
http://www.cnblogs.com/tiwlin/archive/2009/08/06/1540161.html 这是别人写的~~~我借来看看 JavaScript 创建类/对象的几种方式 ...