题目链接:http://poj.org/problem?id=1088

滑雪

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 107380   Accepted: 40919

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

Source

解题思路:

有意思的一道题目,DFS 上下左右搜,记录当前点的最优值。

注意范围:一开始把高度最低的点设为终点,显然这样是不对的,因为可能最后到达次低点的路径更长,或者到达次次低点的路径更长。所以终点就是最后不能再滑的点,无需预先找出来标记,最后在总的路径长度基础上加一即可。

AC code:

 #include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long int
#define INF 0x3f3f3f3f
using namespace std; const int MAXN = ;
int mmp[MAXN][MAXN];
int d[MAXN][MAXN];
int N, M;
bool ok(int x, int y)
{
if(x > && x <= N && y > && y <= M) return true;
else return false;
}
int dfs(int x, int y)
{
if(d[x][y]) return d[x][y];
if(ok(x-, y) && mmp[x-][y]<mmp[x][y])
{
int len = dfs(x-, y)+;
if(len > d[x][y]) d[x][y] = len;
}
if(ok(x+, y) && mmp[x+][y]<mmp[x][y])
{
int len = dfs(x+, y)+;
if(len > d[x][y]) d[x][y] = len;
}
if(ok(x, y-) && mmp[x][y-]<mmp[x][y])
{
int len = dfs(x, y-)+;
if(len > d[x][y]) d[x][y] = len;
}
if(ok(x, y+) && mmp[x][y+]<mmp[x][y])
{
int len = dfs(x, y+)+;
if(len > d[x][y]) d[x][y] = len;
}
return d[x][y];
} int main()
{
int ans = ;
scanf("%d%d", &N, &M);
for(int i = ; i <= N; i++)
for(int j = ; j <= M; j++)
{
scanf("%d", &mmp[i][j]);
}
for(int i = ; i <= N; i++)
for(int j = ; j <= M; j++)
ans = max(ans, dfs(i, j));
printf("%d\n", ans+);
return ;
}

POJ 1088 滑雪 【记忆化搜索经典】的更多相关文章

  1. POJ 1088 滑雪(记忆化搜索+dp)

    POJ 1088 滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 107319   Accepted: 40893 De ...

  2. POJ 1088 滑雪 (记忆化搜索)

    题目链接:http://poj.org/problem?id=1088 题意很好懂,就是让你求一个最长下降路线的长度. dp[i][j]记录的是i j这个位置的最优的长度,然后转移方程是dp[i][j ...

  3. POJ 1088 滑雪 记忆化DP

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K       Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度 ...

  4. POJ 1088 DP=记忆化搜索

    话说DP=记忆化搜索这句话真不是虚的. 面对这道题目,题意很简单,但是DP的时候,方向分为四个,这个时候用递推就好难写了,你很难得到当前状态的前一个真实状态,这个时候记忆化搜索就派上用场啦! 通过对四 ...

  5. POJ 1088 滑雪 记忆化优化题解

    本题有人写是DP,只是和DP还是有点区别的,应该主要是记忆化 Momoization 算法. 思路就是递归,然后在递归的过程把计算的结果记录起来,以便后面使用. 非常经典的搜索题目,这样的方法非常多题 ...

  6. POJ 1191 棋盘分割 【DFS记忆化搜索经典】

    题目传送门:http://poj.org/problem?id=1191 棋盘分割 Time Limit: 1000MS   Memory Limit: 10000K Total Submission ...

  7. tyvj 1004 滑雪 记忆化搜索

    滑雪 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.tyvj.cn/p/1004 Description     trs喜欢滑雪.他来 ...

  8. hdu 1978 How many ways 记忆化搜索 经典例题

    How many ways Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  9. 洛谷-P1434 [SHOI2002]滑雪 (记忆化搜索)

    题意:有一个\(R*C\)的矩阵,可以从矩阵中的任意一个数开始,每次都可以向上下左右选一个比当前位置小的数走,求走到\(1\)的最长路径长度. 题解:这题很明显看到就知道是dfs,但是直接爆搜会TLE ...

随机推荐

  1. 【问题记录】 Linux 安装 apache 遇到的一些问题

    以下为linux上安装apache时自己遇到的一些问题,记录在这,以后遇到时也会不定时更新... 一.安装Apache提示APR not found的解决办法 解决方法: 1. 网站 http://a ...

  2. git命令(转载学习)

    Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是 ...

  3. oracle 查询及删除表中重复数据

    create table test1( id number, name varchar2(20) ); ,'jack'); ,'jack'); ,'peter'); ,'red'); insert i ...

  4. 【数据库】Oracle中删除新建并授权用户

    DROP USER fengw_110 CASCADE; CREATE USER fengw_110 IDENTIFIED BY root123; grant connect,resource,cre ...

  5. poi excel 常用api

    http://www.cnblogs.com/huajiezh/p/5467821.html

  6. Maven工程红色感叹号,且工程无红叉错误

    很可能是jar包不对,可以将maven库里的jar包删除,从 http://mvnrepository.com/ 根据jar包版本号下载到本地maven库,并在pom.xml里引入jar依赖 这次ja ...

  7. [Matlab] awgn

    Y = awgn(X,SNR,SIGPOWER) when SIGPOWER is numeric, it represents the signal power in dBW. When SIGPO ...

  8. artDialog组件应用学习(二)

    一.没有操作选项的对话框 预览: html前台引入代码:(之后各种效果对话框引入代码致,调用方法也一样,就不一一写入) <script type="text/javascript&qu ...

  9. 通过学生-课程关系表,熟悉hive语句

    通过学生-课程关系表,熟悉hive语句 1.在hive中创建以下三个表. create table  student(Sno int,Sname string,Sex string,Sage int, ...

  10. 使用Gulp压缩HTML和CSS

    ---恢复内容开始--- 今天我么继续压缩,但是今天的压缩和之前的不同了!可以说是第二种方法吧! 今天用Gulp来压缩HTML和CSS! 1.首先我们先来安装GUlp:先安装全局gulp 2.然后是开 ...