UVa 10285 - Longest Run on a Snowboard

传送门

UVa 10285 - Longest Run on a Snowboard

题意

小明要滑雪,输入代表高度,只能从高的地方滑向低的地方,输出最长路。

思路

对每个高度的四个方向进行DFS,然后记录。之后用上就行。

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 100 + 10;
const int dir[][2] = { {1, 0}, {-1, 0}, {0, 1}, {0, -1} };

int mp[MAXN][MAXN], dp[MAXN][MAXN], row, col;

int DFS(int x, int y)
{
    int &ans = dp[x][y];
    if (ans != -1)
        return ans;
    ans = 1;
    for (int i = 0; i < 4; i++)
    {
        int xx = x + dir[i][0];
        int yy = y + dir[i][1];
        if (xx >= 0 && xx < row && yy >= 0 && yy < col && mp[x][y] > mp[xx][yy])
            ans = max(ans, DFS(xx, yy) + 1);
    }
    return ans;
}

int main()
{
    //freopen("input.txt", "r", stdin);
    int i, j, n, T, ans;
    char name[MAXN];
    scanf("%d", &T);
    while (T--)
    {
        ans = -1;
        memset(dp, -1, sizeof dp);
        scanf("%s%d%d", name, &row, &col);
        for (i = 0; i < row; i++)
            for (j = 0; j < col; j++)
                scanf("%d", [i][j]);
        for (i = 0; i < row; i++)
            for (j = 0; j < col; j++)
                ans = max(ans, DFS(i, j));
        printf("%s: %d\n", name, ans);
    }
    return 0;
}

Powered by Jekyll and Theme by solid