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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 半夜牙疼怎么办又没药 吃凉东西牙疼怎么办 吃糖导致的牙疼怎么办 微商退货不退钱怎么办 创维电视要收费怎么办 域名已被注册了怎么办 腿上皮肤干燥像鱼鳞怎么办 货拉拉抢不到单怎么办 京东优惠券删了怎么办 吃了发黄的大米怎么办 误吃了霉味大米怎么办 吃了发霉的食物怎么办 面包发霉了吃了怎么办 长期吃了地沟油怎么办 吃了地沟油呕吐怎么办 dnf冲到别人账号怎么办 皮肤买错大区了怎么办 微信实名超过5个怎么办 微信绑定超过5个怎么办 300英雄忘了账号怎么办 163邮箱登陆不上怎么办 手机收不到微信怎么办 苹果微信反应慢怎么办 微信网速特别慢怎么办 微信突然卡住了怎么办 微信一直卡死怎么办 微信打开卡了怎么办 微信卡住不动了怎么办 微信突然卡死了怎么办 手机京东e卡使用怎么办 携程礼品卡欺诈,怎么办 携程礼品卡诈骗怎么办 易事通卡过期了怎么办 设备被淘宝黑了怎么办 饭店排风噪音大怎么办 善融商城不发货怎么办 ps渲染图像很慢怎么办 买房子收据丢了怎么办 买房子发票丢了怎么办 买房的收据丢了怎么办 首付款收据丢了怎么办