luogu P1387 最大正方形

来源:互联网 发布:帝国cms用户密码忘记 编辑:程序博客网 时间:2024/05/22 04:38


题目描述

在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长。

输入输出格式

输入格式:

输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m个数字,用空格隔开,0或1.

输出格式:

一个整数,最大正方形的边长

输入输出样例

输入样例#1:
4 40 1 1 11 1 1 00 1 1 01 1 0 1
输出样例#1:
2












d[i][j]=min(d[i-1][j],d[i][j-1],d[i-1][j-1])+1(s[i][j]==1)

转移方程的定义是,从左、上、左上往上数最长1的个数,取最小。保证外围是1的情况下,里面是1,所以方程有效。


#include<cstdio>#include<algorithm>#define INF 1e9using namespace std;const int maxn=110;int s[maxn][maxn]={0},n,m,d[maxn][maxn]={0},ans=0;int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&s[i][j]);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(s[i][j]==0)continue;d[i][j]=min(d[i-1][j],min(d[i-1][j-1],d[i][j-1]))+1;ans=max(d[i][j],ans);}printf("%d",ans);return 0;}


原创粉丝点击