[ACM] poj 1088 滑雪 (内存搜索DFS)
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 73409 | Accepted: 27141 |
Description
但是为了获得速度,滑的区域必须向下倾斜,并且当你滑到坡底。你不得不再次走上坡或者等待升降机来载你。
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
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
Source
解题思路:
记忆化搜索比普通的搜索效率要高。已经搜索过的就不用再搜索了,有DP的思想.step[i][j] 保存的是当前坐标i,j能够到达的最大距离(不包含自己),比方3 2 1,当前是3,那么能够到达的最大距离为2,对于每一个坐标,能够上下左右四个方向搜索,取距离最大的那个,作为该坐标的step[][]。
记忆化搜索这里体现的就是当搜索到某一个坐标时,该坐标的step[][]已经有值(搜索过了),且肯定是最优的,那么直接返回该step[][]值就能够了。
代码:
- #include <iostream>
- #include <stdio.h>
- #include <string.h>
- using namespace std;
- const int maxn=110;
- int mp[maxn][maxn];
- int step[maxn][maxn];
- int dx[4]={0,0,-1,1};
- int dy[4]={1,-1,0,0};
- int n,m;
- bool judge(int x,int y)
- {
- if(x>=1&&x<=n&&y>=1&&y<=m)
- return true;
- return false;
- }
- int dfs(int x,int y)//当前位置所能到达的最大距离
- {
- if(step[x][y])//搜索过的就不用再又一次搜索,直接返回其值
- return step[x][y];
- for(int i=0;i<4;i++)
- {
- int nextx=x+dx[i];
- int nexty=y+dy[i];
- if(judge(nextx,nexty)&&mp[nextx][nexty]<mp[x][y])
- {
- int temp=dfs(nextx,nexty)+1;
- if(temp>step[x][y])//四个方向取最大值
- step[x][y]=temp;
- }
- }
- return step[x][y];
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- memset(step,0,sizeof(step));
- for(int i=1;i<=n;i++)
- for(int j=1;j<=m;j++)
- scanf("%d",&mp[i][j]);
- int ans=0;
- for(int i=1;i<=n;i++)
- for(int j=1;j<=m;j++)
- {
- step[i][j]=dfs(i,j);
- if(ans<step[i][j])
- ans=step[i][j];
- }
- printf("%d",ans+1);//注意+1,由于本身也是序列里的一员(第一个)
- return 0;
- }
版权声明:本文博客原创文章。博客,未经同意,不得转载。
[ACM] poj 1088 滑雪 (内存搜索DFS)的更多相关文章
- poj 1088 滑雪 DP(dfs的记忆化搜索)
题目地址:http://poj.org/problem?id=1088 题目大意:给你一个m*n的矩阵 如果其中一个点高于另一个点 那么就可以从高点向下滑 直到没有可以下滑的时候 就得到一条下滑路径 ...
- POJ 1088 滑雪(记忆化搜索+dp)
POJ 1088 滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 107319 Accepted: 40893 De ...
- POJ 1088 滑雪(记忆化搜索)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 92384 Accepted: 34948 Description ...
- POJ 1088 滑雪 【记忆化搜索经典】
题目链接:http://poj.org/problem?id=1088 滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: ...
- POJ 1088 滑雪 DFS 记忆化搜索
http://poj.org/problem?id=1088 校运会放假继续来水一发^ ^ 不过又要各种复习,功课拉下了许多 QAQ. 还有呀,就是昨天被一个学姐教育了一番,太感谢了,嘻嘻^ ^ 好了 ...
- POJ 1088 滑雪 (记忆化搜索)
题目链接:http://poj.org/problem?id=1088 题意很好懂,就是让你求一个最长下降路线的长度. dp[i][j]记录的是i j这个位置的最优的长度,然后转移方程是dp[i][j ...
- poj 1088 滑雪(区间dp+记忆化搜索)
题目链接:http://poj.org/problem?id=1088 思路分析: 1>状态定义:状态dp[i][j]表示在位置map[i][j]可以滑雪的最长区域长度: 2>状态转移方程 ...
- POJ 1088 滑雪(模板题 DFS+记忆化)
Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
- POJ 1088 滑雪【记忆化搜索】
题意:给出一个二维矩阵,要求从其中的一点出发,并且当前点的值总是比下一点的值大,求最长路径 记忆化搜索,首先将d数组初始化为0,该点能够到达的路径长度保存在d数组中,同时把因为路径是非负的,所以如果已 ...
随机推荐
- Error: ORA-16501: the Data Guard broker operation failed ORA-16625: cannot reach database
在备库上建配置文件 DGMGRL> create configuration 'sharkdbbork' as primary database is 'sharkdb' connect ide ...
- Ubuntu下安装KDE及安装中文环境
进入Ubuntu的默认安装的桌面后打开终端,输入 sudo apt-get install kubuntu-desktop 回车后输入密码接下来提示下载KDE需要多少空间,解压后需要多少空间,询问是否 ...
- [windows phone] 教你如何使地图动画缩放
原文:[windows phone] 教你如何使地图动画缩放 说明 本篇将介绍如何将地图以动画显示呈现,在以下的范例介绍中可以看到有动画跟没动画的差别,如果你的地图还是很单调的话,不仿加上这个设计,让 ...
- 2048 Puzzle游戏攻略
2048 Puzzle这是目前手机游戏的很火. 在地铁上经常看到的人玩这个游戏. 首先,简介2048 Puzzle游戏. 游戏界面是4X4广场格,每一方格可以放置在数字. 有四种移动数字的方法,向左. ...
- Greenplum+Hadoop学习笔记-14-定义数据库对象之创建与管理模式
6.3.创建与管理模式 概述:DB内组织对象的一种逻辑结构.一个DB内能够有多个模式.在未指定模式时默认放置在public中.能够通过"\dn"方式查看数据库中现有模式: test ...
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
原文:乐在其中设计模式(C#) - 观察者模式(Observer Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 观察者模式(Observer Pattern) 作者:weba ...
- 搭建SSH
搭建SSH详细步骤及相关说明 因为手里已有相关jar,为方便我搭建的是:Struts2.0+Hibernate3.3+Spring3.0,数据库:MySQL 如果想搭建最新的,在官网上下载最新ja ...
- POST和Get辨析
在Form里面,能够使用post也能够使用get.它们都是method的合法取值,可是两者也有不同,主要差别在于传递和获取參数的方式不同 一.Get方法: 1.參数的传递方式: 通过URL请求来传递用 ...
- js比量undefined种类
js比量undefined种类 if (reValue== undefined) { alert("undefined"); } 发现推断不出来.最后查了下资料要用type ...
- Raw-OS互斥的源代码分析的量的Mutex
作为分析的内核版本2014-04-15,基于1.05正式版.blogs我们会跟上的内核开发进度的最新版本,如果出现源代码的目光"???"的话,没有深究的部分是理解. Raw-OS官 ...