输入样例:
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
输出样例:
25
#include <bits/stdc++.h>
using namespace std;
const int N = 310;
int h[N][N];
int f[N][N];
int n, m;
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
int dp(int x, int y)
{
int &v = f[x][y];
if(v != -1) return v;
v = 1;
for(int i = 0;i < 4;i++)
{
int xx = dx[i] + x, yy = dy[i] + y;
if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && h[x][y] > h[xx][yy])
{
v = max(v, dp(xx, yy) + 1);
}
}
return v;
}
int main()
{
cin >> n >> m;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++)
cin >> h[i][j];
memset(f, -1, sizeof f);
int res = 0;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++)
res = max(res, dp(i, j));
cout << res << endl;
return 0;
}