快来找BUG😄
下面的代码有一处错误,我觉得错的很有价值,有参考意义。可以试着自己去代码中找找bug在哪
(文末有提示)
#include <iostream>
using namespace std;
const int NN = 310;
int R, C;
int g[NN][NN], f[NN][NN];
int di[4] = {-1, 1, 0 , 0}, dj[4] = {0, 0, -1, 1};
int dp(int i, int j){
int &v = f[i][j];
if (v) return v; // 记忆化搜索的本质:记录下来已经求过的数值,后面就可以直接用了
v = 1; // 这里不要忘记了,自己这个点也算一个长度
for (int i = 0; i < 4; i ++){
int ni = i + di[i], nj = j + dj[i];
if (1 <= ni && ni <= R && 1 <= nj && nj <= C && g[ni][nj] < g[i][j]){
v = max(v, dp(ni, nj) + 1);
}
}return v;
}
int main(){
cin >> R >> C;
for (int i = 1; i <= R; i ++){
for (int j = 1; j <= C; j ++){
scanf("%d", &g[i][j]);
}
}
int ans = 0;
for (int i = 1; i <= R; i ++){
for (int j = 1; j <= C; j ++){
ans = max(ans, dp(i, j));
}
}
cout << ans;
return 0;
}
提示:看看循环变量