RT,代码输出为1,样例输出为25。
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
int _skiResort[105][105];
int _ans[105][105];
int dfs(int, int, int, int);
int main(void)
{
int c = 0, r = 0, res = -1;
memset(_ans, 0, sizeof (_ans));
memset(_skiResort, 0, sizeof (_skiResort));
scanf("%d %d", &r, &c);
for (int i = 1; i < r + 1; i++)
{
for (int j = 1; j < c + 1; j++)
{
scanf("%d", &_skiResort[i][j]);
}
}
for (int i = 1; i < r + 1; i++)
{
for (int j = 1; j < c + 1; j++)
{
res = max(res, dfs(c, r, i, j));
}
}
printf("%d\n", res);
return 0;
}
int dfs(int m, int n, int x, int y)
{
if (_ans[x][y])
{
return _ans[x][y];
}
int dx = 0, dy = 0;
_ans[x][y] = 1;
dx = x;
dy = y + 1;
if (0 < dx && 0 < dy && dx < n + 1 && dy < m + 1 && _skiResort[dx][dy] < _skiResort[x][y])
{
dfs(m, n, dx, dy);
_ans[x][y] = max(_ans[x][y], _ans[dx][dy]);
}
dx = x - 1;
dy = y;
if (0 < dx && 0 < dy && dx < n + 1 && dy < m + 1 && _skiResort[dx][dy] < _skiResort[x][y])
{
dfs(m, n, dx, dy);
_ans[x][y] = max(_ans[x][y], _ans[dx][dy]);
}
dx = x;
dy = y - 1;
if (0 < dx && 0 < dy && dx < n + 1 && dy < m + 1 && _skiResort[dx][dy] < _skiResort[x][y])
{
dfs(m, n, dx, dy);
_ans[x][y] = max(_ans[x][y], _ans[dx][dy]);
}
dx = x + 1;
dy = y;
if (0 < dx && 0 < dy && dx < n + 1 && dy < m + 1 && _skiResort[dx][dy] < _skiResort[x][y])
{
dfs(m, n, dx, dy);
_ans[x][y] = max(_ans[x][y], _ans[dx][dy]);
}
return _ans[x][y];
}
求大佬赐教,靴靴~