JZOJ8.13最大正方形

    xiaoxiao2024-11-28  5

    题目:

    给一个N*N的01矩阵, 求一个面积最大的全为1的正方形子矩阵. 输出它的面积.

    依题意来说,一开始没什么好想法,打算直接暴力枚举,再加上了一些优化。可是后来超时70分,不得不想其他更好的方法了。最后选择了一个判断和累加的方法,方程是total[i,j]:=min(total[i-1,j],total[i,j-1],total[i-1,j-1])+1; 最后用一个max更新最大值即可。

    附上代码:

    const   maxn=1000; var   map,total:array[0..maxn,0..maxn] of longint;   n,m,max:longint;   s:ansistring; procedure init; var   i,j,num:longint; begin   readln(n);   for i:=1 to n do     begin       readln(s);       for j:=1 to n do         begin           val(s[j],num);           map[i,j]:=num;         end;     end; end; function min(a,b,c:longint):longint; begin   min:=maxlongint;   if min>a then     min:=a;   if min>b then     min:=b;   if min>c then     min:=c; end; procedure main; var   i,j:longint; begin   for i:=1 to n do     for j:=1 to n do       if map[i,j]=1 then         begin           total[i,j]:=min(total[i-1,j],total[i,j-1],total[i-1,j-1])+1;           if max<total[i,j] then             max:=total[i,j];         end;   write(max*max); end; begin   init;   main; end.

    转载请注明原文地址: https://ju.6miu.com/read-1294049.html
    最新回复(0)