算法1
(暴力枚举) $O(n * m)$
时间复杂度
m * n
C++ 代码
// 记忆化搜索
#include <iostream>
#include <cstring>
using namespace std;
const int N = 310;
int dp[N][N];
int f[N][N];
int m, n;
int dx[4] = {0, -1, 0, 1}, dy[4] = {-1, 0, 1, 0};
// 主要就是不方便写成for循环的类型,就这样写
int dfs(int s, int b)
{
int &v = f[s][b];
if(v) return v;
v ++;
for(int i = 0; i < 4; i ++)
{
int x = dx[i] + s, y = dy[i] + b;
if(x >= 0 && x < m && y >= 0 && y < n && dp[s][b] > dp[x][y])
v = max(v, dfs(x, y) + 1);
}
return v;
}
int main()
{
cin >> m >> n;
for(int i = 0; i < m; i ++)
for(int j = 0; j < n; j ++)
cin >> dp[i][j];
memset(f, 0, sizeof f);
// 记忆化搜素
int res = 0;
for(int i = 0; i < m; i ++)
for(int j = 0; j < n; j ++)
res = max(res, dfs(i, j));
cout << res;
return 0;
}