10285 - Longest Run on a Snowboard
Time limit: 3.000 seconds
中文翻译:http://poj.org/problem?id=1088
递归写就行。
完整代码:
/*0.025s*/
#include<bits/stdc++.h>
using namespace std;
const int v[4][2] = {0, -1, 0, 1, -1, 0, 1, 0};
const int maxn = 105;
char name[maxn];
int h[maxn][maxn], dp[maxn][maxn];
int f(int y, int x)
{
if (!dp[y][x])
{
dp[y][x] = 1;
for (int i = 0; i < 4; ++i)
if (h[y][x] > h[y + v[i][0]][x + v[i][1]])
dp[y][x] = max(dp[y][x], f(y + v[i][0], x + v[i][1]) + 1);
}
return dp[y][x];
}
int main()
{
int t, r, c, i, j, maxrun;
scanf("%d", &t);
while (t--)
{
scanf("%s%d%d", name, &r, &c);
memset(h, 0x3f, sizeof(h));
memset(dp, 0, sizeof(dp));
for (i = 1; i <= r; ++i)
for (j = 1; j <= c; ++j)
scanf("%d", &h[i][j]);
maxrun = 0;
for (i = 1; i <= r; ++i)
for (j = 1; j <= c; ++j)
maxrun = max(maxrun, f(i, j));
printf("%s: %d\n", name, maxrun);
}
return 0;
}