洛谷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

解题思路

动态规划最大图问题 

动态规划转移方程 f[i,j]:=min(f[i,j-1],f[i-1,j],f[i-1,j-1])+1;

program BigRectangle;  
var f:Array[0..100,0..100] of longint;  
    i,j,m,n,ans:Longint;  
function min(a,b,c:int64):int64;  
begin  
    if (a<=b) and (a<=c) then exit(a);  
    if (b<=c) and (b<=a) then exit(b);  
    if (c<=a) and (c<=b) then exit(c);  
end;  
begin  
        read(n,m);  
        for i:=1 to n do  
            for j:=1 to m do read(f[i,j]);  
        for i:=1 to n do  
            for j:=1 to m do  
            begin  
                if f[i,j]=1 then  
                begin  
                    f[i,j]:=min(f[i,j-1],f[i-1,j-1],f[i-1,j])+1;  
                end;  
            end;  
            for i:=1 to n do  
            begin  
               for j:=1 to m do  
               if f[i,j]>ans then ans:=f[i,j];  
            end;  
            if ans=0 then writeln('1') else write(ans);  //注意特判ans=0的情况
  
  
end.  

 

posted @ 2015-08-13 20:54  Alisahhh  阅读(166)  评论(0编辑  收藏  举报