POJ 1088----滑雪(DP)
原题连接: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)相关推荐
- POJ 1088 滑雪(输出对比)
http://poj.org/problem?id=1088 滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 68159 ...
- poj 1088 滑雪(线性DP)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 81553 Accepted: 30437 Description ...
- poj 1088 滑雪 (dp)
题目链接 题意就不多解释了,题目思路很简单,搜索就行了,但是暴搜会TLE,但是对于每一个dfs(X, Y),如果参数一样的话结果也是一样的,我们用一个二维数组去保存每次计算的位置的结果,最后从所有的解 ...
- POJ - 1088 滑雪 【DP】【DFS】
Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
- poj 1088 滑雪 详解
http://poj.org/problem?id=1088 这是一道dp入门题,不过我一直没想明白应该怎么dp.今天,在做自己学校oj的算法基础题时看到这题,标注着dp的分类,加上我一直都比较喜欢做 ...
- 动态规划 POJ 1088 滑雪
Description Michael 喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知 ...
- POJ 1088 滑雪 (动规)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 75664 Accepted: 28044 Description Mich ...
- poj 1088滑雪
经典的动态规划问题: 1 #include<iostream> 2 3 using namespace std; 4 5 int b[101][101]; 6 int d[101][101 ...
- Fire (poj 2152 树形dp)
Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000).现在要选择某些点,使得整棵树都被覆盖到.当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同 ...
- I - 滑雪 POJ - 1088(深搜,记忆化搜索)
Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡. ...
最新文章
- 微软服务器应用软件,HTTP 服务器示例应用程序
- Android Lanuch 的资料汇总
- apollo 配置中心_分布式配置中心之Apollo
- ionic 安装 inappbrowser 插件后编译失败的解决办法
- intellij中导入外部的依赖包+在当前的工程中使用
- PopupWindow在项目中的使用 并指定位置及加入动画效果
- java string查找_查找输出程序(Java String类)
- 因涉嫌信披违规 神州优车被证监会立案调查
- 东南亚ERP系统怎么样?
- 关于时间、日期的一些应用
- 文字排版中的字号尺寸对照表(清晰、准确(含两个版本对比)、可复制)
- overfeat 测试
- centOS 手动部署 wekan
- 天之痕java 郡王府_轩辕剑3外传天之痕图文攻略【含支线任务】
- CF 379F: New Year Tree
- 【稳定性day7】mPaaS - 蚂蚁金服高可用的产品化之路
- 拓嘉辰丰:拼多多店铺DSR动态评分的更新周期?
- 2013年第三季度总结报告
- nssl 1438.战略威慑
- 【转】jquery $.fn $.fx是什么意思
热门文章
- 基于Echarts+HTML5可视化数据大屏展示—新能源车联网综合大数据平台(二)
- html多个单元格合并单元格内容,excel怎样快速把多个单元格内容合并 合并多个单元格内容的设置方法...
- 中秋主题html,中秋节活动主题标语
- 没有bug队——加贝——Python 43,44
- MATLAB基础教程(5)——斐波那契数列
- 惯性矩和偏心距描述器
- seo vue 动态路由_VUE项目SEO问题的解决
- 进入实现类快捷键_实测30个自带快捷键,原来键盘也这么好用!
- mysql 共享锁_mysql有排他锁为什么还需要共享锁呢?
- oracle segment undo_71_UNDO扩展学习