[洛谷1387]最大正方形

 

题目描述

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:

4 4
0 1 1 1
1 1 1 0
0 1 1 0
1 1 0 1

输出样例#1:

2

思路

  DP,f[i,j]表示以i,j为最右边最下边点的正方形大小。

  f[i,j]:=min(min(f[i-1,j],f[i,j-1]),f[i-1,j-1])+1

var a,f:array[0..1000,0..1000] of longint;  
    n,m,i,j,ans:longint;  
  
function max(x,y:longint):longint;  
begin  
    if x>y then exit(x) else exit(y);  
end;  
  
function min(x,y:longint):longint;  
begin  
    if x>y then exit(y) else exit(x);  
end;  
  
begin  
    fillchar(a,sizeof(a),0);  
    fillchar(f,sizeof(f),0);  
    readln(n,m);  
    for i:=1 to n do  
        for j:=1 to m do  
            read(a[i,j]);  
    for i:=1 to n do  
        for j:=1 to m do  
            if a[i,j]=1 then  
                f[i,j]:=min(min(f[i-1,j],f[i,j-1]),f[i-1,j-1])+1;  
    for i:=1 to n do  
        for j:=1 to m do  
            ans:=max(ans,f[i,j]);  
    writeln(ans);  
end.  
View Code

 

posted on 2015-10-24 11:06  川汉唐  阅读(211)  评论(0编辑  收藏  举报

导航