题目描述
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(从 24 开始,在 1 结束)。当然 25-24-23-…-3-2-1 更长。事实上,这是最长的一条。

输入格式
输入的第一行为表示区域的二维数组的行数 R 和列数 C。下面是 R 行,每行有 C 个数,代表高度(两个数字之间用 1 个空格间隔)。

输出格式
输出区域中最长滑坡的长度。

输入输出样例
输入 #1复制
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
输出 #1复制
25
说明/提示
对于 100% 的数据,1≤R,C≤100。

滑雪算得上是一道非常经典的题了。

这个题的思路就是点不多,在每一个点上对四个方向进行搜索,由于重复的路径太多,只需要加个记忆化就好,我们开始从头写一下。

头文件,std命名空间,四个方向写出来:

#include<bits/stdc++.h>
using namespace std;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};

定义长r,宽c, 答案ans,存高度的数组a[][],存记忆化路径的数组s[][]。

int r, c, ans, s[101][101], a[101][101];

写搜索:首先记忆化,如果没有走过,这个点自己算一个,然后循环四个方向,四个方向分别进行搜索,递归。

int dfs(int x, int y)
{if(s[x][y]) return s[x][y];s[x][y] = 1;for(int i=0;i<4;i++){int xx=x+dx[i];int yy=y+dy[i];if(xx>0&&yy>0&&xx<=r&&yy<=c&&a[xx][yy]<a[x][y]){dfs(xx, yy);s[x][y] = max(s[x][y], s[xx][yy]+1);}}return s[x][y];
}

主函数,输入r,c,a[][]:

cin >> r >> c;
for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)cin >> a[i][j];

循环每个点,每个点都进行搜索:

for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)ans = max(ans, dfs(i,j));

最后输出即可:

cout << ans;

完整代码:

#include<bits/stdc++.h>
using namespace std;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int r, c, ans, s[101][101], a[101][101];
int dfs(int x, int y)
{if(s[x][y]) return s[x][y];s[x][y] = 1;for(int i=0;i<4;i++){int xx=x+dx[i];int yy=y+dy[i];if(xx>0&&yy>0&&xx<=r&&yy<=c&&a[xx][yy]<a[x][y]){dfs(xx, yy);s[x][y] = max(s[x][y], s[xx][yy]+1);}}return s[x][y];
}
int main()
{cin >> r >> c;for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)cin >> a[i][j];for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)ans = max(ans, dfs(i,j));cout << ans;return 0;
}

洛谷OJ P1434 [SHOI2002]滑雪 搜索 递归 记忆化搜索相关推荐

  1. 洛谷:P1434 [SHOI2002] 滑雪 题解

    题目: P1434 [SHOI2002] 滑雪 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 本题关键字:记忆化搜索. 首先,这题为什么会想到记忆化?(知道的人直接跳过) 在dfs ...

  2. 动态规划经典题目——滑雪问题(递归+记忆化搜索)

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

  3. POJ1088 Bailian1088 滑雪【DFS+记忆化搜索】

    滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 114685 Accepted: 43807 Description Mic ...

  4. POJ1088 滑雪 dp入门 记忆化搜索

    题意:给你一个r*c的矩阵,只能从图上数字大的地方滑向数字小的地方,问你一次性最多滑过多少个数字. 思路:记忆化搜索.顺序搜索,记录地图上每一个点出发所能达到的最远长度,若某一点标记过说明当前点的最远 ...

  5. 记忆化搜索例题 记忆化搜索

    1.poj  1579 题目链接: http://poj.org/problem?id=1579 代码如下: #include <cstdio> #include <cstring& ...

  6. 洛谷P1434滑雪(逆向图的遍历搜索递归+记忆化,最长路问题)

    题目链接:https://www.luogu.org/problemnew/show/P1434 刚开始最先想到的就是正向递归遍历,遍历所有情况方法,记录找到最长的,正向递归遍历也不难写,但会超时. ...

  7. 【深度优先搜索】记忆化搜索 P1077 摆花

    题意:  深度优先搜索: int dfs(index,cnt)表示选到第index个花,且当前一共选了cnt个 结果为dfs(1,0) index>n+1 return 0 cnt==m    ...

  8. 最大乘积(记忆化搜索)

    题目描述 给一段数列,用k个乘号分开,求所得最大值 n<10! 解析 这样就不用写高精啦 枚举第一个乘号的位置递归记忆化搜索即可 问题! 一开始边界条件写了一个这个: if(n-st<k) ...

  9. UVA10285 Longest Run on a Snowboard【DFS+记忆化搜索】

    Michael likes snowboarding. That's not very surprising, since snowboarding is really great. The bad ...

  10. HDU2089 不要62【数位DP+记忆化搜索】

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

最新文章

  1. 爬虫核心原理:一次 HTTP 请求到底是如何完成的?
  2. 从头开始搭建爬虫环境
  3. sonar:默认的扫描规则
  4. TCP/IP详解学习笔记(1)
  5. C4D素材背景模板|广泛应用电商场景和展览的运用
  6. 在自定义HttpHandler中使用Session
  7. 标识符的作用域与可见性
  8. 传入一个月份获取该月的统计信息
  9. 进程之基础知识(一)
  10. Oracle P6培训系列:02登录
  11. 【操作系统⑩】——进程死锁【银行家算法+详细样例 进程死锁的预防机制、避免机制、检测与解决】
  12. 流氓软件驱动精灵 强制锁定浏览器主页
  13. vue项目html5调取手机摄像头录像并上传
  14. SAP GUI登陆系统报Validity of certificate from list with PSE type >SSL错误弹窗
  15. oracle 考试结果哪里查,oracle认证考试成绩查询的方法是怎样的?
  16. 过了所有技术面,却倒在 HR 一个问题上
  17. 轻松实现iMessage群发
  18. app软件开发有哪些方式?
  19. Make your own Neural NetWork之代码详解中
  20. eterm和easyfare的官网地址

热门文章

  1. python可视化地图
  2. 飞秋常见文件解决方案
  3. java人脸识别怎么写-------源码附上
  4. cmd识别java命令却不识别javac
  5. springboot+Vue在线考试系统
  6. 前端开源项目周报1213
  7. 新CentOS配制使用时会遇到的问题,Yum的使用,Yum源切换
  8. 深入理解Nginx~正常运行的配置项
  9. 多智能体通信:MAGNet用于深度多智能体强化学习的多智能体图网络
  10. (可更新)计算机算法设计与分析 第4版 (王晓东) 课后答案[1-9章]