最大全1正方形(簡單dp)

2021-08-28 19:14:01 字數 829 閱讀 7003

描述

飛哥最近 得到 了一大塊 n*m 的土地 ,他想在這塊土地 上建乙個正方 形的農場 ,但是 這塊土 地有些地方 被大石頭 佔著,無法 使用 ,於是 飛哥想來問你 在這塊土地 上能建成的農場 的最大 邊 長為多少 ?

輸入第乙個數t表示陣列組數

每組 資料 一開 始有兩個 整數 n和 m,表示 土地 的長和寬。

接下 來是個 n*m 的矩陣 ,元素 只有 0 和 1 ,0表示 這塊地方 被石頭 佔著。1表示 可以 使用 。

m,n<=1000

輸出對每組資料 輸出 一行 ,表示 農場 最大 的邊長 。

思路:設dp[i][j]表示以第i行第j列為右下角的最大正方形,考慮如何寫出狀態轉移。

發現只有當(i-1,j-1),(i-1,j),(i,j-1)對應的dp值的最小值大於0時,這個點才能起到擴大正方形的作用。

所以dp[i][j]=min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1 

**:

#include #include #include using namespace std;

const int maxn=1e3+6;

int n,m;

int a[maxn][maxn];

int dp[maxn][maxn];

int main()

}int ans=0;

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

else

ans=max(ans,dp[i][j]);}}

printf("%d\n",ans);

}return 0;

}

dp 最大全1子正方形

例題1 usaco big barn 巨大的牛棚農夫約翰想要在他的正方形農場上建造一座正方形大牛棚。他討厭在他的農場中砍樹,想找乙個能夠讓他在空曠無樹的地方修建牛棚的地方。我們假定,他的農場劃分成 n x n 的方格。輸入資料中包括有樹的方格的列表。你的任務是計算並輸出,在他的農場中,不需要砍樹卻能...

最大正方形

題目鏈結 在乙個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...

最大正方形

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