当我加上 dp[1][1] = 1 的初始化时,结果如下:
链接,代码:
// Problem: P1681 最大正方形II
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1681
// Memory Limit: 125 MB
// Time Limit: 1000 ms
//
// Coding by 2044_space_elevator
#include <bits/stdc++.h>
#define rty printf("Yes\n");
#define RTY printf("YES\n");
#define rtn printf("No\n");
#define RTN printf("NO\n");
#define rep(v,b,e) for(int v=b;v<=e;v++)
#define repq(v,b,e) for(int v=b;v<e;v++)
#define rrep(v,e,b) for(int v=b;v>=e;v--)
#define rrepq(v,e,b) for(int v=b;v>e;v--)
#define stg string
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
void solve() {
}
int n, m, arr[1505][1505], dp[1505][1505];
int main() {
// int t; cin >> t; while (t--) solve();
cin >> n >> m;
rep(i, 1, n) {
rep(j, 1, m) {
cin >> arr[i][j];
}
}
int ans = 1;
rep(i, 1, n) {
rep(j, 1, m) {
if (i == 1 &&j == 1) {
dp[i][j] = 1;
continue;
}
if (arr[i][j] != arr[i - 1][j] && arr[i][j] != arr[i][j - 1]) {
dp[i][j] = min({dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]}) + 1;
}
ans = max(ans, dp[i][j]);
}
}
cout << ans;
return 0;
}
而当我去掉 dp[1][1]=1,且在答案里输出 ans+1,能够神奇 AC!
// Problem: P1681 最大正方形II
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1681
// Memory Limit: 125 MB
// Time Limit: 1000 ms
//
// Coding by 2044_space_elevator
#include <bits/stdc++.h>
#define rty printf("Yes\n");
#define RTY printf("YES\n");
#define rtn printf("No\n");
#define RTN printf("NO\n");
#define rep(v,b,e) for(int v=b;v<=e;v++)
#define repq(v,b,e) for(int v=b;v<e;v++)
#define rrep(v,e,b) for(int v=b;v>=e;v--)
#define rrepq(v,e,b) for(int v=b;v>e;v--)
#define stg string
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
void solve() {
}
int n, m, arr[1505][1505], dp[1505][1505];
int main() {
// int t; cin >> t; while (t--) solve();
cin >> n >> m;
rep(i, 1, n) {
rep(j, 1, m) {
cin >> arr[i][j];
}
}
int ans = 1;
rep(i, 1, n) {
rep(j, 1, m) {
if (arr[i][j] != arr[i - 1][j] && arr[i][j] != arr[i][j - 1]) {
dp[i][j] = min({dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]}) + 1;
}
ans = max(ans, dp[i][j]);
}
}
cout << ans + 1;
return 0;
}
大家能解释一下这个灵异现象吗……毕竟我认为最左上角的格子应该是答案为 1 的。