uvaoj 10285 - Longest Run on a Snowboard 记忆化搜索
2014-11-17 14:14
381 查看
10285 - Longest
Run on a Snowboard
滑雪的时候要从高出滑到地处,现给定一个r*c的矩阵,只有当周围的四个格子的高度低于这个格子的时候,才可以滑到这个格子,现在让求出能滑的最长距离.
使用记忆化搜索来做,dp[i][j]表示从位置i,j开始上升的最大长度(其实和下降的是一样的),在高度数组周围赋值为-1,表示不能上升到边界外,则dp[i][j]=四周的最大距离+1,使用递归来写,当周围不能再上升的时候,这个位置就是1,然后把这个值记下来,下次访问到的时候就不用在计算了.
代码如下:
Run on a Snowboard
滑雪的时候要从高出滑到地处,现给定一个r*c的矩阵,只有当周围的四个格子的高度低于这个格子的时候,才可以滑到这个格子,现在让求出能滑的最长距离.
使用记忆化搜索来做,dp[i][j]表示从位置i,j开始上升的最大长度(其实和下降的是一样的),在高度数组周围赋值为-1,表示不能上升到边界外,则dp[i][j]=四周的最大距离+1,使用递归来写,当周围不能再上升的时候,这个位置就是1,然后把这个值记下来,下次访问到的时候就不用在计算了.
代码如下:
/************************************************************************* > File Name: 10285.cpp > Author: gwq > Mail: 457781132@qq.com > Created Time: 2014年11月17日 星期一 09时15分49秒 ************************************************************************/ #include <cmath> #include <ctime> #include <cctype> #include <climits> #include <cstdio> #include <cstdlib> #include <cstring> #include <map> #include <set> #include <queue> #include <stack> #include <vector> #include <iostream> #include <algorithm> #define INF (INT_MAX / 10) #define clr(arr, val) memset(arr, val, sizeof(arr)) #define pb push_back #define sz(a) ((int)(a).size()) using namespace std; typedef set<int> si; typedef vector<int> vi; typedef map<int, int> mii; typedef long long ll; #define N 110 int h , dp , r, c; int dx[] = {-1, 0, 1, 0}; int dy[] = {0, 1, 0, -1}; char str ; //记忆化搜索,计算以sx,sy为起点的最长上升序列长度 int dfs(int sx, int sy) { if (dp[sx][sy] > 0) { return dp[sx][sy]; } else { int ret = 1; for (int i = 0; i < 4; ++i) { int nx = sx + dx[i]; int ny = sy + dy[i]; if (h[nx][ny] > h[sx][sy]) { ret = max(ret, dfs(nx, ny) + 1); } } dp[sx][sy] = ret; return ret; } } int solve(void) { int ans = 0; clr(dp, 0); for (int i = 1; i <= r; ++i) { for (int j = 1; j <= c; ++j) { ans = max(ans, dfs(i, j)); } } return ans; } int main(int argc, char *argv[]) { int t; scanf("%d", &t); while (t--) { scanf("%s%d%d", str, &r, &c); clr(h, -1); for (int i = 1; i <= r; ++i) { for (int j = 1; j <= c; ++j) { scanf("%d", &h[i][j]); } } printf("%s: %d\n", str, solve()); } return 0; }
相关文章推荐
- UVA 10285 Longest Run on a Snowboard(记忆化搜索)
- UVa 10285 - Longest Run on a Snowboard 记忆化搜索
- uva 10285 Longest Run on a Snowboard(记忆化搜索)
- UVa 10285 - Longest Run on a Snowboard 记忆化搜索
- UVa 10285 / POJ 1088 Longest Run on a Snowboard (记忆化搜索)
- UVa 10285 Longest Run on a Snowboard - 记忆化搜索
- UVa 10285 Longest Run on a Snowboard【记忆化搜索】
- uva 10285 Longest Run on a Snowboard (记忆化搜索)
- UVA 10285 Longest Run on a Snowboard(记忆化搜索)
- uva 10285 Longest Run on a Snowboard(记忆化搜索)
- UAV -10285 Longest Run on a Snowboard (记忆化搜索)
- uva10285 Longest Run on a Snowboard(dp之记忆化搜索 )
- UVA 10285 Longest Run on a Snowboard(记忆化搜索|动态规划入门)
- UVa 10285 - Longest Run on a Snowboard(记忆化搜索)
- POJ1088 滑雪 | UVa10285 - Longest Run on a Snowboard
- uva 10285 Longest Run on a Snowboard (DP)
- UVA 10285 - Longest Run on a Snowboard (记忆化搜索+dp)
- UVA 10285 Longest Run on a Snowboard
- UVA 10285 - Longest Run on a Snowboard
- 习题9-1 UVA 10285 Longest Run on a Snowboard 最长滑雪路径(记忆话搜索)