vijos 1057 盖房子 dp 最大子正方形
生活随笔
收集整理的這篇文章主要介紹了
vijos 1057 盖房子 dp 最大子正方形
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
P1057蓋房子 未遞交 標(biāo)簽:[顯示標(biāo)簽]
描述
永恒の靈魂最近得到了面積為n*m的一大塊土地(高興ING^_^),他想在這塊土地上建造一所房子,這個房子必須是正方形的。
但是,這塊土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵)。這些瑕疵十分惡心,以至于根本不能在上面蓋一磚一瓦。
他希望找到一塊最大的正方形無瑕疵土地來蓋房子。
不過,這并不是什么難題,永恒の靈魂在10分鐘內(nèi)就輕松解決了這個問題。
現(xiàn)在,您也來試試吧。
格式
輸入格式
輸入文件第一行為兩個整數(shù)n,m(1<=n,m<=1000),接下來n行,每行m個數(shù)字,用空格隔開。0表示該塊土地有瑕疵,1表示該塊土地完好。
輸出格式
一個整數(shù),最大正方形的邊長。
樣例1
樣例輸入1[復(fù)制]
4 4 0 1 1 1 1 1 1 0 0 1 1 0 1 1 0 1樣例輸出1[復(fù)制]
2限制
各點時限均為1s。
來源
永恒の靈魂根據(jù)經(jīng)典問題改編(超級弱智題)
子矩陣n^3,單調(diào)棧應(yīng)該也可以;
#include<iostream> #include<cstdio> #include<cmath> #include<string> #include<queue> #include<algorithm> #include<stack> #include<cstring> #include<vector> #include<list> #include<set> #include<map> using namespace std; #define ll __int64 #define esp 0.00000000001 const int N=1e3+10,M=1e6+10,inf=1e9+10,mod=1000000007; int a[N][N]; int dp[N][N]; int main() {int x,y,z,i,t,j,k;while(~scanf("%d%d",&x,&y)){for(i=1;i<=x;i++)for(t=1;t<=y;t++)scanf("%d",&a[i][t]);int ans=0;for(i=1;i<=x;i++){for(t=1;t<=y;t++){if(a[i][t])dp[i][t]=min(dp[i-1][t-1],min(dp[i][t-1],dp[i-1][t]))+1;ans=max(dp[i][t],ans);}}printf("%d\n",ans);}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/jhz033/p/5746003.html
總結(jié)
以上是生活随笔為你收集整理的vijos 1057 盖房子 dp 最大子正方形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。