题目
题目见 01间隔方阵
之前发的一篇是01间隔矩阵,这篇是间隔方阵。
码也是根据之前的改的。
找出01矩阵中边长最长的01间隔正方形
思路
最大面积都找出来了,最大正方形还找不出么。。
还是DP找出左右边界和高,然后最后条件改成max(ans,min(H[j],R[j]-L[j]+1))就行了
代码
#include <iostream>
using namespace std;
#define maxn 1010
char c[maxn][maxn];
int L[maxn], H[maxn], R[maxn];
int main() {
int n,m;
cin >> n >> m;
for(int i = 0; i < n; i++){
cin >> c[i];
}
int ans = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(i>0 && c[i-1][j]!=c[i][j]) ++H[j];
else H[j] = 1;
}
for(int j = 0; j<m; j++){
L[j] = j;
while(L[j] && H[j] <= H[L[j]-1] && c[i][L[j]] != c[i][L[j]-1])
L[j] =L[L[j]-1];
}
for(int j = m-1; j >=0; j--){
R[j] = j;
while(R[j]<m-1 && H[j]<=H[R[j]+1] && c[i][R[j]] != c[i][R[j]+1])
R[j] = R[R[j]+1];
}
for(int j = 0; j < m; j++){
int temp = min(H[j],R[j]-L[j]+1);
ans=max(ans,temp);
}
}
cout << ans << endl;
return 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。