背景描述:忙完了學校的事,v神終於可以做他的「正事」:陪女朋友散步。一天,他和女朋友走著走著,不知不覺就來到了乙個千里無菸的地方。v神正要往回走,如發現了一塊牌子,牌子上有有一行小字和一張圖,小字說道:「找到圖上最大的交錯正方形之後和我聯絡,這塊地就是你的了。」在房價瘋長的年代,v神當然不願錯過這個機會,於是開始找了起來……以v神的能力當然找不出來了,你能幫v神找出來嗎?
題目描述:
圖上有乙個矩陣,由n*m個格仔組成,這些格仔由兩種顏色構成,黑色和白色。請找到到面積最大的且內部是黑白交錯(即兩個相連的正方形顏色不能相同)的正方形。
輸入格式:
第一行兩個整數n和m,分別表示行數和列數。接下來有n行,每行m個數,0或1分別表示這個格仔是黑色或白色。
輸出格式:
僅有一行,表示滿足條件最大正方形的 邊長。
樣例輸入:
3 30 1 0
1 0 0
1 1 1
樣例輸出:
2樣例解釋:
(1,1)到(2,2)這個正方形是滿足條件的,它的邊長是2
資料範圍約定:
對於30%的資料,n <= 20
對於60%的資料,n <=300
對於100%的資料,n <= 1500
var f,a:array[0..1500,0..1500] of longint;
n,m,i,j,k,sum:longint;
function min(x,y,z:longint):longint;
begin
if x>y then x:=y;
if x>z then x:=z;
exit(x);
end;
begin
assign(input,'p4.in'); assign(output,'p4.out');
reset(input); rewrite(output);
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do
read(a[i,j]);
readln;
end;
for i:=1 to n do
for j:=1 to m do
if (i mod 2)=(j mod 2) then
a[i,j]:=abs(a[i,j]-1);
for i:=1 to n do
for j:=1 to m do
if a[i,j]=1 then
begin
f[i,j]:=min(f[i-1,j],f[i,j-1],f[i-1,j-1])+1;
if f[i,j]>sum then sum:=f[i,j];
end;
fillchar(f,sizeof(f),0);
for i:=1 to n do
for j:=1 to m do
if a[i,j]=0 then
begin
f[i,j]:=min(f[i-1,j],f[i,j-1],f[i-1,j-1])+1;
if f[i,j]>sum then sum:=f[i,j];
end;
writeln(sum);
close(input); close(output);
end.
動態規劃 面積最大正方形
給定乙個矩陣,其中的元素為0或者1,要求找出其中元素全為1的面積最大的正方形。如下圖的矩陣,其元素全為1的最大正方形面積為4。方法一 對於每乙個元素,把以其為右下角的矩陣的和求出來,然後根據這個和與左上邊的元素的和的關係來求解。但這種方法時間和空間複雜度都較高。public int maximals...
221 最大正方形 動態規劃
題目描述 在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 4 方法1 動態規劃 主要思路 1 該方法的實現比較簡單,主要是能夠理解動態轉移公式 dp i j min ...
221 最大正方形(動態規劃
在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。上班之餘還是要保持穩定的刷題習慣。做完本題後回憶了四道dp的題 爬樓梯,打家劫舍,最短路徑和,最大正方形。發現動態規劃思考量最大的還是動態轉移方程 1.本題的關鍵點就是想通,狀態轉移方程,dp i j min dp ...