80分wa,然而我看不出有什么问题qwq
WA了#7
和#9
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
// f[i][j][0]: (1,1)~(i,j) Smax, (i,j)=black; ~[1]: (1,1)~(i,j) Smax, (i,j)=white
// if (i,j)=black: f[i][j][0]=min(f[i][j-1][1],f[i-1][j][1],f[i-1][j-1][0])+1
// if (i,j)=white: f[i][j][1]=min(f[i][j-1][0],f[i-1][j][0],f[i-1][j-1][1])+1
int f[1510][1510][2];
bool map[1510][1510];
int n, m, ans = -1;
int main()
{
memset(f, 0, sizeof(f));
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
for (int j = 1, d; j <= m; j++)
{
scanf("%d", &d);
map[i][j] = d;
f[i][1][0] = f[i][1][1] = f[1][j][0] = f[1][j][1] = 1;
}
for (int i = 2; i <= n; i++)
for (int j = 2; j <= n; j++)
if (map[i][j])
{
f[i][j][1] = min(f[i][j - 1][0], min(f[i - 1][j][0], f[i - 1][j - 1][1])) + 1;
ans = max(ans, f[i][j][1]);
}
else
{
f[i][j][0] = min(f[i][j - 1][1], min(f[i - 1][j][1], f[i - 1][j - 1][0])) + 1;
ans = max(ans, f[i][j][0]);
}
printf("%d", ans);
return 0;
}