UVA - 10285 Longest Run on a Snowboard
2015-03-16 20:13
337 查看
题目大意:(强势插入)在一块R * C的雪地上有个叫name名字的人滑雪, 每次可以从高的地方滑向低的地方, 现在要选一个地方开始滑雪, 要求可以滑动的距离最长, 输出最长值。
解题思路:可以说是DFS吧, 但是对于每个位置只遍历一次(强势插入), 然后记录最优解, 下次再遇到时可直接调用最优解。
解题思路:可以说是DFS吧, 但是对于每个位置只遍历一次(强势插入), 然后记录最优解, 下次再遇到时可直接调用最优解。
#include <cstdio> #include <algorithm> using namespace std; int H[10100]; int cmp (int a, int b) { return H[a] < H[b]; } int main () { int T, R, C; char name[50]; scanf("%d", &T); while (T--) { scanf("%s%d%d", name, &R, &C); int cnt = R * C, p[10100], DP[10100] = {0}; for (int i = 0; i < cnt; p[i] = i, i++) scanf("%d", &H[i]); sort(p, p + cnt, cmp); int ans = 0, Dir[4] = {-1, 1, -C, C}; for (int k = 0; k < cnt; k++) for (int l = 0; l < 4; l++) { int i = p[k], j = p[k] + Dir[l]; if (i < 0 || l == 0 && i % C == 0 || l == 1 && i % C == C - 1) continue; if (H[i] < H[j] && DP[i] >= DP[j]) { DP[j] = DP[i] + 1; ans = max(ans, DP[j]); } } printf("%s: %d\n", name, ans + 1); } 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 - 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(dp+记忆化搜索)
- 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
- uva 10285 Longest Run on a Snowboard
- uva 10285——Longest Run on a Snowboard
- UVA - 10285 Longest Run on a Snowboard (线性DP)
- UVA-10285-Longest Run on a Snowboard
- UVa10285 Longest Run on a Snowboard