POJ 1088 Java:滑雪(动态规划)
来源:互联网 发布:mysql数据导入到hive 编辑:程序博客网 时间:2024/05/11 12:32
这是一个动态规划问题(Dynamic programming):讲一个较大的问题分为若干的相互有关的子问题,即重叠子问题,使用递归的方法来求解。
对于这个问题来说,点A的步数为,与其相邻的四个点中高度低于A的点中,步数最长的点+1。
在计算每一个点的步数时,有些点的步数信息有可能会被重复使用,因此我们可以将每个点的步数信息计算出后存储,当再次需要时即可不必计算,直接调用。这就是记忆化搜索。
AC代码:
//滑雪,动态规划package poj.regue;import java.util.*;public class Poj1088 {private static int height[][], memory[][];private static int n, m;// 记录输入数量public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();int max = 0;height = new int[n + 3][m + 3];memory = new int[n + 3][m + 3]; // 避免递归查找时数组越界for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (sc.hasNext()) {height[i][j] = sc.nextInt();}}}for(int i=1; i<=n; i++){for(int j=1; j<=m; j++){memory[i][j] = dp(i, j);if(max < memory[i][j]){max = memory[i][j];}}}System.out.println(max);sc.close();}public static int dp(int x, int y) {int max = 0;int tmp;if (x < 1 || y < 1 || x > n || y > m) {// 已经到达边界return 0;}if (memory[x][y] != 0) {// 已经查找过return memory[x][y];}if (height[x][y] > height[x][y + 1]) {// 向上查找tmp = dp(x, y + 1);if (max < tmp)max = tmp;}if (height[x][y] > height[x][y - 1]) {// 向下查找tmp = dp(x, y - 1);if (max < tmp)max = tmp;}if (height[x][y] > height[x - 1][y]) {// 向左查找tmp = dp(x - 1, y);if (max < tmp)max = tmp;}if (height[x][y] > height[x + 1][y]) {// 向右查找tmp = dp(x + 1, y);if (max < tmp)max = tmp;}return max + 1;}}
0 0
- POJ 1088 Java:滑雪(动态规划)
- poj 1088滑雪 (动态规划)
- POJ 1088 滑雪(动态规划经典)
- POJ 1088 - 滑雪(动态规划)
- 动态规划 :POJ 1088 滑雪
- poj 1088 滑雪 动态规划
- POJ 1088 滑雪 -- 动态规划
- POJ 1088 滑雪 动态规划
- POJ-1088 滑雪 (动态规划)
- 【动态规划】[POJ 1088]滑雪
- poj 1088 滑雪 动态规划
- poj 1088 滑雪【动态规划】
- poj 1088 滑雪 动态规划
- [POJ](1088)滑雪 ---- 动态规划
- POJ 1088 滑雪(动态规划)(解题报告)
- POJ 1088 滑雪(动态规划+记忆化搜索)
- poj 1088 滑雪(动态规划:记忆化搜索)
- poj 1088 滑雪(记忆化搜索/动态规划)
- ie浏览器点击F12没反应
- ExtJS5 - 一个简洁完整的后台管理系统入门实例
- Centos 内存占满 释放内存
- makefile静态库 动态库
- 在Linux系统中,如何查看硬件信息
- POJ 1088 Java:滑雪(动态规划)
- android DownloadManager获取进度并显示(二)
- HDU 2689 Sort it(树状数组,逆序数)
- iOS 支付宝支付的使用
- [土狗之路]Coursera C++第10周作业(上)
- MySQL中查询磁盘空间
- TestOptimal 系列一:TestOptimal介绍及安装
- 常用YUV转RGB代码
- 如何生成验证码