矩阵动归--最大正方形
来源:互联网 发布:飞越巅峰 知乎 编辑:程序博客网 时间:2024/05/14 16:04
题目描述
在一个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;
}
#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
阅读全文
1 0
- 矩阵动归--最大正方形
- HDU 1081(经典动归,求最大子矩阵)
- 01矩阵最大正方形
- 最大正方形子矩阵
- 2163 最大正方形子矩阵
- 动归
- wikioi 1259 最大正方形子矩阵
- vojos 1055,1057 最大子矩阵、正方形
- 0 1 矩阵查找最大正方形
- [DP动归]-POJ-2479-最大两段子串和
- 最大子矩阵和(poj1050 动规)
- 简单动规 最大子矩阵和
- 最大正方形
- 最大正方形
- 最大正方形
- 最大正方形
- 最大正方形
- 最大正方形
- 微软准备在Windows 10中移除沃通和StartCom两大证书签发机构
- shell 的expect实践
- Mob第三方短信验证非常簡單
- github学习(one)
- easyUi双击table任意一行出现弹框
- 矩阵动归--最大正方形
- python单元模块测试
- Spring中的AOP(四)——在Advice方法中获取目标方法的参数
- java 代码块,构造代码块,与静态代码块
- 大数据实验室:零基础学习大数据该看哪些书?
- Maven+ssm+IDEA实现简单的秒杀系统(一)
- mysql利用数据库函数实现用拼音搜索中文的实现
- requests、beautifulsoup爬取页面总结
- CentOS环境下tomcat启动超级慢的解决方案