TYVJ P1563 最大正方形

2021-05-26 21:35:23 字數 1587 閱讀 1805

同usaco 3.3.4基本類似,只是在判斷的時候稍有改動,只有組成邊長為2的正方形每個頂點互不重複這個正方形才成立。

其他的地方也是很類似,在此就不詳細敘述了。(詳情見本部落格中usaco 3.3.4的解題報告)。

program p1563;

var n,m:longint;

ans:array [0..1500,0..1500] of longint;

a:array [0..1500,0..1500] of longint;

f:array [0..1500,0..1500,0..50] of boolean;

procedure init;

var i,j:longint;

begin

fillchar(f,sizeof(f),false);

readln(n,m);

for i:=1 to n do

begin

for j:=1 to m do read(a[i,j]);

end;

end;

function minn(x,y:longint):longint;

begin

if xa[i,j-1]) and (a[i,j]<>a[i-1,j]) and (a[i-1,j-1]<>a[i,j-1]) and (a[i-1,j-1]<>a[i-1,j]) then

begin

f[i,j,2]:=true;

ans[i,j]:=2;

end;

end;

end;

for i:=1 to n do

begin

for j:=1 to m do

begin

min:=minn(i,j);

for k:=3 to min do

begin

if (f[i-1,j-1,k-1]) and (f[i-1,j,k-1]) and (f[i,j-1,k-1]) and (a[i,j]<>a[i,j-1]) and (a[i,j]<>a[i-1,j]) then

begin

f[i,j,k]:=true;

ans[i,j]:=k;

endelse break;

end;

end;

end;

end;

procedure outit;

var i,j,max:longint;

begin

max:=-maxlongint;

for i:=1 to n do for j:=1 to m do if ans[i,j]>max then max:=ans[i,j];

writeln(max);

end;

begin

assign(input,'p1563.in'); reset(input);

assign(output,'p1563.out'); rewrite(output);

init;

main;

outit;

close(input); close(output);

end.

最大正方形

題目鏈結 在乙個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...

最大正方形

題解 if a i j 1 f i j min min f i j 1 f i 1 j f i 1 j 1 1 f i j 表示以節點i,j為右下角,可構成的最大正方形的邊長。只有a i j 1時,節點i,j才能作為正方形的右下角 對於乙個已經確定的f i j x,它表明包括節點i,j在內向上x個節...

最大正方形

一.題目描述 在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 4 二.思路 動態規劃 當前元素matrix i j 對應的最大正方形邊長跟matrix i 1 j m...