题目描述
新格尔王国的皇家花园内只有2种花,分别是红色和黄色的,花共有n行m列,花园的负责人很喜欢红花,他想划定一个最大的正方形区域,使得区域内全部是红花,请问这个区域最大边长是多少?
输入
第一行两个数n,m,含义如题目所述。(1<=n,m<=1000)
以下是n行m列的01矩阵,1表示红花,0表示黄花,数字之间有一个空格。
输出
输出一个数,表示最大正方形红花区域的边长。
样例输入
4 40 1 1 11 1 1 00 1 1 01 1 0 1
样例输出
2
提示
来源
解题思路:dp[i][j] 表示以矩阵i行j列为右下角的最大正方形的边长
dp[i][j] = min(dp[i-1][j],dp[i-1][j-1],dp[i][j-1])+1 (square[i][j]==1)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<string>
#include<cstring>
#include<cmath>
using
namespace
std;
#define ESP 1e-6
int
n,m;
int
square[1010][1010];
int
dp[1010][1010];
//dp[i][j]
int
min(
int
a,
int
b,
int
c)
{
int
ans = a;
if
(b<ans){
ans = b;
}
if