洛谷P1387最大正方形(dp,字首和)

2022-04-06 04:32:33 字數 1253 閱讀 6424

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

暴力a了(有技巧的暴力)

/*

二維字首和列舉

這樣的水題搞了乙個多小時,原來是公式背錯了......

列舉每乙個子矩陣的和是否等於邊長的平方 自己yy的,沒想到還過了

不算慢。

但其實是dp......又傷心了

*/#include

#include

#define maxn 101

using

namespace

std;

intn,m,ans,tot,cnt;

ints[maxn][maxn],map[maxn][maxn],sum[maxn][maxn];

intmain()

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

for(int j=1;j<=m;j++)

sum[i][j]=sum[i-1][j]+s[i][j];

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

for(int j=1;j<=m;j++)

}printf(

"%d\n

",ans);

return0;

}

正解dp

//

其實方程很好想,就是沒勇氣寫,怕給輸出0....

#include

#include

using

namespace

std;

int a[105][105]= },f[105][105]= },n,m,maxb=1

;int minn(int a,int b,int

c)int

main()

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

for(int j=1; j<=m; j++)

if(f[i][j]>maxb)

maxb=f[i][j];

cout

<}

DP 洛谷 P1387 最大正方形

題目描述 在乙個n m 的只包含0和 1的矩陣裡找出乙個不包含 0的最大正方形,輸出邊長。輸入輸出格式 輸入格式 輸入檔案第一行為兩個整數 n,m 1 n,m 100 接下來 n行,每行 m個數字,用空格隔開,0或 1.輸出格式 乙個整數,最大正方形的邊長 輸入輸出樣例 輸入樣例 1 複製4 4 0...

洛谷 P1387 最大正方形 dp

題目描述 在乙個n m的只包含0和1的矩陣裡找出乙個不包含0的最大正方形,輸出邊長。輸入輸出格式 輸入格式 輸入檔案第一行為兩個整數n,m 1 n,m 100 接下來n行,每行m個數字,用空格隔開,0或1.輸出格式 乙個整數,最大正方形的邊長 輸入輸出樣例 輸入樣例 1 4 4 0 1 1 1 1 ...

洛谷 P1387 最大正方形 ( dp

在乙個n m的只包含0和1的矩陣裡找出乙個不包含0的最大正方形,輸出邊長。字首和思想 維護乙個dp i j d p i j 表示的是矩陣內以i,j i,j 為右下角的最大的正方形大小 include using namespace std define ll long long define pb ...