時間限制: 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分別表示矩陣的行數和...