最大正方形

2021-08-25 19:37:02 字數 936 閱讀 4088

題目鏈結

在乙個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 0 1

輸出樣例#1:複製

2
分析:

最大正方形問題的轉移方程:f[i][j]=min(f[i-1][j-1],f[i-1][j],f[i][j-1])+1.

那麼是什麼意思呢?

f[i][j]表示以(i,j)為右下角的最大正方形的邊長。

那麼f[i][j-1]就保證了往上最多能擴充套件的邊長。f[i-1][j]就保證了往左邊能擴充套件的最大邊長。

f[i-1][j-1]就保證了對角線的最大長度。三者去min,然後+1,就是f[i][j]

這個思想可以引申到很多類似的求最大正方形的題目(一般的都是這個思想)

**如下:

#include using namespace std;

const int maxn = 100+5;

int dp[maxn][maxn];

int a[maxn][maxn];

int main()

} memset(dp,0,sizeof(dp));

for(int i=1;i<=n;i++)

} cout

}

最大正方形

題解 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...

最大正方形

最大正方形 在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。題解 動態規劃 使用dp i j 代表以i,j為右下角只包含1的正方形 首先需要考慮幾點 一 當前的dp i j 的值和和 i 1,j i,j 1 i 1,j 1 有關,如果當前 i,j 為1 那麼需要考...