原题连接:http://poj.org/problem?id=1088

Description

Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子

 1  2  3  4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-…-3-2-1更长。事实上,这是最长的一条。

Input
输入的第一行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。
Output
输出最长区域的长度。
Sample Input
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
Sample Output
25

思路解析:看到数据就可以基本判断这是个图论的问题,基本要用的无非dfs,dp之类的。简单分析之后,我们得知是要从图中找到一条最长的路径。我们可以从每个点出发,进行按方向走动(即定义dir[][] = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}},四个坐标的顺序无所谓)。如果到某个点的一条路径是最长的,那么它之前的点连起来一定是最长的。

import java.util.Scanner;public class Main {static int n, m;static int[][] f, dp;static int max = 0;static int[][] dir = {{0,-1}, {0, 1}, {-1, 0}, {1, 0}};public static void main(String[] args) {Scanner in = new Scanner(System.in);n = in.nextInt();m = in.nextInt();f = new int[n + 1][m + 1];dp = new int[n + 1][m + 1];for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {f[i][j] = in.nextInt();}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {max = Math.max(max, dp(i, j) + 1);}}System.out.println(max);}private static int dp(int x, int y) {// TODO Auto-generated method stubint dx, dy;if (dp[x][y] != 0) {return dp[x][y];}for (int i = 0; i < 4; i++) {dx = x + dir[i][0];dy = y + dir[i][1];if (dx < 1 || dy < 1 || dx > n || dy > m || f[dx][dy]  > f[x][y]) {continue;}dp[x][y] = Math.max(dp[x][y], dp(dx, dy) + 1);}return dp[x][y];}
}

POJ 1088----滑雪(DP)相关推荐

  1. POJ 1088 滑雪(输出对比)

    http://poj.org/problem?id=1088 滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 68159 ...

  2. poj 1088 滑雪(线性DP)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 81553   Accepted: 30437 Description ...

  3. poj 1088 滑雪 (dp)

    题目链接 题意就不多解释了,题目思路很简单,搜索就行了,但是暴搜会TLE,但是对于每一个dfs(X, Y),如果参数一样的话结果也是一样的,我们用一个二维数组去保存每次计算的位置的结果,最后从所有的解 ...

  4. POJ - 1088 滑雪 【DP】【DFS】

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  5. poj 1088 滑雪 详解

    http://poj.org/problem?id=1088 这是一道dp入门题,不过我一直没想明白应该怎么dp.今天,在做自己学校oj的算法基础题时看到这题,标注着dp的分类,加上我一直都比较喜欢做 ...

  6. 动态规划 POJ 1088 滑雪

    Description Michael 喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知 ...

  7. POJ 1088 滑雪 (动规)

    滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 75664 Accepted: 28044 Description Mich ...

  8. poj 1088滑雪

    经典的动态规划问题: 1 #include<iostream> 2 3 using namespace std; 4 5 int b[101][101]; 6 int d[101][101 ...

  9. Fire (poj 2152 树形dp)

    Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000).现在要选择某些点,使得整棵树都被覆盖到.当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同 ...

  10. I - 滑雪 POJ - 1088(深搜,记忆化搜索)

    Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡. ...

最新文章

  1. 微软服务器应用软件,HTTP 服务器示例应用程序
  2. Android Lanuch 的资料汇总
  3. apollo 配置中心_分布式配置中心之Apollo
  4. ionic 安装 inappbrowser 插件后编译失败的解决办法
  5. intellij中导入外部的依赖包+在当前的工程中使用
  6. PopupWindow在项目中的使用 并指定位置及加入动画效果
  7. java string查找_查找输出程序(Java String类)
  8. 因涉嫌信披违规 神州优车被证监会立案调查
  9. 东南亚ERP系统怎么样?
  10. 关于时间、日期的一些应用
  11. 文字排版中的字号尺寸对照表(清晰、准确(含两个版本对比)、可复制)
  12. overfeat 测试
  13. centOS 手动部署 wekan
  14. 天之痕java 郡王府_轩辕剑3外传天之痕图文攻略【含支线任务】
  15. CF 379F: New Year Tree
  16. 【稳定性day7】mPaaS - 蚂蚁金服高可用的产品化之路
  17. 拓嘉辰丰:拼多多店铺DSR动态评分的更新周期?
  18. 2013年第三季度总结报告
  19. nssl 1438.战略威慑
  20. 【转】jquery $.fn $.fx是什么意思

热门文章

  1. 基于Echarts+HTML5可视化数据大屏展示—新能源车联网综合大数据平台(二)
  2. html多个单元格合并单元格内容,excel怎样快速把多个单元格内容合并 合并多个单元格内容的设置方法...
  3. 中秋主题html,中秋节活动主题标语
  4. 没有bug队——加贝——Python 43,44
  5. MATLAB基础教程(5)——斐波那契数列
  6. 惯性矩和偏心距描述器
  7. seo vue 动态路由_VUE项目SEO问题的解决
  8. 进入实现类快捷键_实测30个自带快捷键,原来键盘也这么好用!
  9. mysql 共享锁_mysql有排他锁为什么还需要共享锁呢?
  10. oracle segment undo_71_UNDO扩展学习