矩阵动归--最大正方形
2017-08-10 14:33
218 查看
题目描述
在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长。
输入输出格式
输入格式:输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m个数字,用空格隔开,0或1.
输出格式:
一个整数,最大正方形的边长
题解:f[i][j]表示从(1,1)到(i,j)的矩形和,再用二分查找
#include<iostream>#include<cstdio>
#include<string>
using namespace std;
int n,m,num=0;
int f[151][151],l,r,mid;
int ok(int x)
{
for(int i=x;i<=n;i++)
for(int j=x;j<=m;j++)
{num=f[i][j]-f[i-x][j]-f[i][j-x]+f[i-x][j-x];
if(num>=x*x) return 1;//一定是num>=x*x 否则会wa
}
return 0;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{ cin>>f[i][j];
f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1]+f[i][j];
}
l=0;r=min(n,m);
while(l<r)
{mid=(l+r+1)>>1;
if(ok(mid)) l=mid;
else r=mid-1;
}
cout<<l<<endl;
}
输出样例#1:
2
相关文章推荐
- DP---求给定矩阵中最大正方形的维度
- 在矩阵中寻找最大正方形连续区域
- DP---求给定矩阵中最大正方形的维度
- 0 1 矩阵查找最大正方形
- 最大子段和||最大子矩阵和||最大全1子矩阵||最大全1子正方形||
- 求01矩阵中的最大的正方形面积
- 01矩阵最大正方形
- wikioi 1259 最大正方形子矩阵
- 最大子段和||最大子矩阵和||最大全1子矩阵||最大全1子正方形||
- 2D矩阵求最大正方形子矩阵,各项元素为1
- 一个M*N的矩阵,元素取值1或0,问如何找到最大的正方形,其所有的元素都为1
- 【BZOJ1057】【ZJOI2007】棋盘制作 最大01子矩阵/正方形
- 【难】【DP】计算bool矩阵中,仅包含1的最大矩形和最大正方形
- 221. Maximal Square -- 矩阵中1组成的最大正方形
- bzoj1057(洛谷1169)最大01子矩阵和最大01子正方形
- 最大正方形子矩阵
- vojos 1055,1057 最大子矩阵、正方形
- 一个M*N的矩阵,元素取值1或0,问如何找到最大的正方形,其所有的元素都为1
- LeetCode: 221_Maximal Square | 二维0-1矩阵中计算包含1的最大正方形的面积 | Medium
- 华为机考 给你一个N*M的矩阵,每个位置的值是0或1,求一个面积最大的子矩阵,这个矩阵必须是一个正方形,且里面只能由1构成,输出最大的正方形边长。其中n,m<=400;