#include<iostream>
#include<string>
#include<memory.h>
#define max(a,b) (a>b?a:b)
using namespace std;
int dir[4][2] = { {1,0},{-1,0},{0,1},{0,-1} };
int R, C;
int **Map, **dp;
int DP(int r, int c)
{
if (dp[r][c] == -1)
{
int tmp = 0;
for (int i = 0; i < 4; i++)
{
int newR = r + dir[i][0], newC = c + dir[i][1];
if (newR >= 0 && newR < R && newC >= 0 && newC < C && Map[newR][newC] < Map[r][c])
{
tmp = max(tmp, DP(newR, newC));
}
}
dp[r][c] = tmp + 1;
}
return dp[r][c];
}
int main()
{
int N;
cin >> N;
while (N--)
{
string name;
cin >> name >> R >> C;
Map = new int*[R];
dp = new int*[R];
for (int i = 0; i < R; i++)
{
Map[i] = new int[C];
dp[i] = new int[C];
memset(dp[i], -1, C * sizeof(int));
for (int j = 0; j < C; j++)
{
cin >> Map[i][j];
}
}
int res = -1;
for (int i = 0; i < R; i++)
{
for (int j = 0; j < C; j++)
{
if (dp[i][j] == -1)
{
res = max(res, DP(i, j));
}
}
}
cout << name << ": " << res << endl;
delete Map;
delete dp;
}
return 0;
}
UVa 10285 Longest Run on a Snowboard
最新推荐文章于 2021-11-11 10:00:19 发布