交了十幾遍才過,本來這只是一道水題,然而誰讓我快讀寫炸了呢(詳情見「gg記錄(6)」)。。。
f[i][j]表示i,j位置為右下角的最大正方形
如果i或j為1,很顯然,f[i][j]的值最大為1,否則便要從三個方向取最小值轉移
如果不滿足轉移的條件,將其賦值為1即可
#includevoid read(int &y)}int max(int x,int
y)int min(int x,int
y)int n,m,x,ans,a[1505][1505],f[1505][1505
];int
main()
if(a[i][j]==0&&a[i-1][j]==1&&a[i][j-1]==1) f[i][j]=min(min(f[i-1][j-1],f[i-1][j]),f[i][j-1])+1
;
else
if(a[i][j]==1&&a[i-1][j]==0&&a[i][j-1]==0) f[i][j]=min(min(f[i-1][j-1],f[i-1][j]),f[i][j-1])+1
;
else f[i][j]=1
; ans=max(f[i][j],ans);}}
printf("%d
",ans);
return0;
}
P1681 最大正方形 Iand II
在乙個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 0 1 1...
luogu p1387 最大正方形
理論上來說可以暴力列舉邊長和右下角座標,而且似乎有人能用這方法過這道題。不過列舉太不現實,而且資料強一點的話就徹底沒辦法了,還是要dp。用兩個陣列l,w分別儲存每個位置 包括本身 向左和向上各有幾個連續的1,如果乙個位置是1,這個位置的w和l就能從別的位置轉移過來。似乎預處理能與輸入一起完成?不過我...
最大正方形
題目鏈結 在乙個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...