在一个0,1方阵中找出其中最大的全0子矩阵,所谓最大是指O的个数最多。
分析:说是一道动规题,其实完全不算,就是先统计前缀和,然后纵行统计。
uses math;
const n=2010;
var
inn,ans,i,j,lo,ro:longint;
h,l,r:array[0..n] of longint;
o:array[0..n,0..n] of longint;
begin
ans:=0;
readln(inn);
for i:=1 to inn do
for j:=1 to inn do
read(o[i,j]);
for i:=1 to inn do begin
h[i]:=0;
l[i]:=1;
r[i]:=inn;
end;
for i:=1 to inn do begin
lo:=0;ro:=inn+1;
for j:=1 to inn do
if o[i,j]=1 then begin
h[j]:=0;
l[j]:=1;
lo:=j;
end else begin
inc(h[j]);
l[j]:=max(l[j],lo+1);
end;
for j:=inn downto 1 do
if o[i,j]=1 then begin
r[j]:=inn;
ro:=j;
end else begin
r[j]:=min(r[j],ro-1);
ans:=max(ans,h[j]*(r[j]-l[j]+1));
end;
end;
writeln(ans);
end.