最大正方形

2021-09-05 13:12:27 字數 1375 閱讀 1008

題解: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個節點,向左x個節點掃過的正方形中所有a值都為1;

對於乙個待確定的f[i][j],我們已知f[i-1][j],f[i][j-1],f[i-1][j-1]的值,如下:

f陣列:

? ? 2 1

? ? 3?

則說明原a陣列:

1 1 1 0

1 1 1 1

1 1 11

由此得出狀態轉移方程:

if (a[i][j]==1) f[i][j]=min(min(f[i][j-1],f[i-1][j]),f[i-1][j-1])+1;

for example:

a[i][j]:

0 0 0 1

1 1 1 1

0 1 1 1

1 1 1 1

f[i][j]:

0 0 0 1

1 1 1 1

0 1 2 2

1 1 2 3

/*

*@author: stzg

*@language: c++

*/#include #include#include#include#include#include#include#include#include#include#include#include#include#include#include#include//#define debug

#define ri register int

using namespace std;

typedef long long ll;

typedef __int128 lll;

const int n=1000;

const int mod=1e9+7;

const double pi = acos(-1.0);

const double exp = 1e-8;

const int inf = 0x3f3f3f3f;

int t,n,m,k,q,ans;

int a[n][n];

int f[n][n];

int main()

}cout

return 0;

}

最大正方形

題目鏈結 在乙個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 的最大正方形,並返回其面積。示例 輸入 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 那麼需要考...