DP 構造 最大全0子陣

2021-07-03 03:30:33 字數 1450 閱讀 8631

時間限制: 1 sec 記憶體限制: 128 mb

在乙個0,1方陣中找出其中最大的全0子矩陣,所謂最大是指0的個數最多。

第一行為整數n,其中1<=n<=2000,為方陣的大小,緊接著n行每行均有n個0或1,相鄰兩數間嚴格用乙個空格隔開。

僅一行包含乙個整數表示要求的最大的全零子矩陣中零的個數。

5 0 1 0 1 0

0 0 0 0 0

0 0 0 0 1

1 0 0 0 0

0 1 0 0 0

var

l,r,x,w:array[0..2001,0..2001]of longint;

i,j,k:longint;

n,h,ans:longint;

function

min(a,b:longint):longint;

begin

if a>b

then

exit(b)

else

exit(a);

end;

function

max(a,b:longint):longint;

begin

if a>b

then

exit(a)

else

exit(b);

end;

begin

readln(n);

for i:=1

to n do

begin

for j:=1

to n do

read(w[i,j]);

readln;

end;

for i:=1

to n do

for j:=1

to n do

if w[i,j]=1

then x[i,j]:=0

else x[i,j]:=x[i-1,j]+1;

for i:=1

to n do

begin

for j:=n downto1do

begin

r[i,j]:=j;

while (r[i,j]<>n)and(x[i,j]<=x[i,r[i,j]+1]) do

r[i,j]:=r[i,r[i,j]+1];

end;

for j:=1

to n do

begin

l[i,j]:=j;

while (l[i,j]<>0)and(x[i,j]<=x[i,l[i,j]-1]) do

l[i,j]:=l[i,l[i,j]-1];

end;

for j:=1

to n do

ans:=max(ans,x[i,j]*(r[i,j]-l[i,j]+1));

end;

writeln(ans);

end.

最大全0子矩陣問題

題意 給定乙個01矩陣,求 1.最大全0正方形面積 2.最大全0子矩陣面積 我是分割線 對於第一問,我們有o nm 的動態規劃解法 設f i j 表示以i,j為右下角的最大正方形邊長 正確性可以自己yy一下 對於第二問有許多o nm 的奇怪解法,具體可以參照2003年福州第三中學王知昆的 用極大化思...

1159 最大全0子矩陣

f i,j 表示以 i,j 為右下角的最大全0子矩陣的邊長 若a i j 1,f i,j 0 否則 f i,j min 1 這樣求得的是最大全0正方形子矩陣 要求長方形矩陣,上述思路行不通 假設以 i,j 為右下角的最大矩陣 12 它可能是3 4 4 3 2 6 6 2 1 12 12 1 按上述思...

最大下降子陣

我們稱乙個矩陣是下降矩陣,當且僅當,矩陣的每一列都是嚴格下降的。很顯然,這個要求很苛刻,大多數矩陣都無法滿足。但是顯然如果消去一些行,一定可以使得這個矩陣變成下降矩陣。現在給出乙個n行m列的矩陣,請你求出最少消去多少行,可以使得這個矩陣變為下降矩陣。輸入第一行包含兩個正整數n,m分別表示矩陣的行數和...