下了测试点,发现本地比正确答案大1
#include <bits/stdc++.h>
using namespace std;
int a[2002][2002],n,m,f[2002][2002],s1,s2;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
if((i+j)%2) a[i][j]=(a[i][j]+1)%2;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]) f[i][j]=min(min(f[i][j-1],f[i-1][j]),f[i-1][j-1])+1;
s1=max(s1,f[i][j]);
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(!a[i][j]) f[i][j]=min(min(f[i][j-1],f[i-1][j]),f[i-1][j-1])+1;
s2=max(s2,f[i][j]);
}
}
cout<<max(s1,s2);
}