打算下数据特判了捏(
by NGC_6357 @ 2023-10-12 19:29:19
```
#include<iostream>
#include<cmath>
using namespace std;
int n, m, a[101][101], f[101][101], ans = 0;
void Scanf(){
cin >> n >> m;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
cin>>a[i][j];
}
}
}
void H(){
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
if(a[i][j] == 0){
continue;
}
f[i][j] = min(min
(f[i - 1][j], f[i][j - 1]),
f[i - 1][j - 1]) + 1;
}
}
}
int main(){
Scanf();
H();
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
if(f[i][j] > ans){
ans = f[i][j];
}
}
}
cout<<ans<<endl;
return 0;
}
```
by CCA_zhujunwei @ 2023-10-16 19:57:49
@[CCA_zhujunwei](/user/1014750) %%%
by NGC_6357 @ 2023-10-18 19:40:41
找到问题了
```cpp
#include <bits/stdc++.h>
#define N 2005
using namespace std;
int n, m, ans1, ans2;
int ma[N][N], u[N][N], l[N][N], r[N][N];
void left(){
for(int i = 1; i <= n; i++){
for(int j = 2; j <= m; j++){
if(ma[i][j - 1] == 1) l[i][j] = l[i][j - 1];// 在这里写一个ma[i][j] == 1判一下自己
}
}
}
void right(){
for(int i = 1; i <= n; i++){
for(int j = m; j > 1; j--){
if(ma[i][j] == 1) r[i][j - 1] = r[i][j];
}
}
}
void solve(){
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(i > 1 && ma[i - 1][j] == 1 && ma[i][j] == 1){// 或者在这里判一下
u[i][j] = u[i - 1][j] + 1;
l[i][j] = max(l[i][j], l[i - 1][j]);
r[i][j] = min(r[i][j], r[i - 1][j]);
}
int a = r[i][j] - l[i][j] + 1;
int b = min(a, u[i][j]);
ans1 = max(ans1, b);
}
}
}
signed main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
scanf("%d", &ma[i][j]);
u[i][j] = 1;
l[i][j] = j;
r[i][j] = j;
}
}
left();
right();
solve();
printf("%d", ans1);
return 0;
}
```
by NGC_6357 @ 2023-10-18 19:41:32
旋线法?黄题绿解(
by yyrwlj @ 2023-10-20 09:05:39