题目链接: P1434 [SHOI2002]滑雪
解题思路: 在这道题中dfs每种情况是,可能这个点之前已经搜过了,没必要再去搜索了,因此不如存储记住,就没必要再去dfs了。所以我们要记忆化搜索解决这道题。这题每个点出发都有可能,所以我们每个点都要开始dfs,最后取他们的最大值。用dp[maxn][maxn]去保存当前点长度的最大值。
dfs部分和类似的迷宫差不多,用两个数组表示4个方向:

const int dx[] = { 1,0,-1,0 };
const int dy[] = { 0,1,0,-1 };

改变方向直接xx=x+dx[i] , yy=y+dy[i],接下来判断这个方向是否在地图范围内,即

bool isValid(int x, int y) {if (x<1 || x>n || y<1 || y>m) {return 0;}return 1;
}

当然还要判断这个点是否能滑到,也就是高度要前一个低:

if (map[x][y] > map[x + dx[i]][y + dy[i]])

接下来,就要往四个方向搜索,取四个方向中距离最长的,然后+1(加上自己),这就是这个点的结果了。

int tp = 1,temp;for (int i = 0; i < 4; i++) {if (map[x][y] > map[x + dx[i]][y + dy[i]]) {temp=DFS(x + dx[i], y + dy[i])+1;//用temp记录某个方向的长度.tp = max(tp, temp);//取四个方向最长的}}return dp[x][y] = tp;//别忘了把当前点的最大长度存入dp数组中。

代码:

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1000;
const int dx[] = { 1,0,-1,0 };
const int dy[] = { 0,1,0,-1 };
int n, m, map[maxn][maxn],dp[maxn][maxn],ans;
bool isValid(int x, int y) {if (x<1 || x>n || y<1 || y>m) {return 0;}return 1;
}
int DFS(int x, int y) {if (!isValid(x, y)) {return 0;}if (dp[x][y]) {return dp[x][y];}int tp = 1,temp;for (int i = 0; i < 4; i++) {if (map[x][y] > map[x + dx[i]][y + dy[i]]) {temp=DFS(x + dx[i], y + dy[i])+1;tp = max(tp, temp);/*dp[x][y] = max(dp[x][y], dp[x + dx[i]][y + dy[i]]+1);*/}}return dp[x][y] = tp;
}
int main() {cin >> n >> m;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++) {cin >> map[i][j];}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {ans=max(ans, DFS(i, j));}}cout << ans << endl;
}

洛谷—P1434 [SHOI2002]滑雪题解相关推荐

  1. [洛谷]P1434 [SHOI2002] 滑雪

    P1434 [SHOI2002] 滑雪 1.题目 2.分析 3.代码 1.map + dp 70 原因分析:当key相同时,map会覆盖掉先前的值!! 2.优先队列priority_queue + d ...

  2. 洛谷 P1434 [SHOI2002] 滑雪(优先队列+dp / 记忆化搜索)

    P1434 [SHOI2002] 滑雪https://www.luogu.com.cn/problem/solution/P1434 优先队列+dp 本题状态转移方程一目了然 为了保证状态间无后效性, ...

  3. 洛谷P1434 [SHOI2002]滑雪

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

  4. 洛谷 P1434 [SHOI2002]滑雪(DP,记忆化搜索)

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

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

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

  6. [P1434 [SHOI2002]滑雪](DFS,记忆化搜索)

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

  7. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  8. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  9. 洛谷P1273 有线电视网 题解

    洛谷P1273 有线电视网 题解 题目链接:P1273 有线电视网 题意: 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为 ...

最新文章

  1. 关于Input内容改变的触发事件
  2. Best Time to Buy and Sell Stock
  3. 营销 | 10个助燃商业增长的市场营销战略!
  4. python ks值计算_利用Python计算KS的实例详解
  5. 操作系统下查看HBA卡信息wwn的方法
  6. php图片编辑失真,PHP处理图片固定大小 不失真 不变形
  7. java并发初探ConcurrentHashMap
  8. linux驱动编写(pwm驱动)
  9. 《学习opencv》笔记——矩阵和图像处理——cvMax,cvMaxS,cvMerge,cvMin and cvMinS
  10. C语言中的main函数为什么被称作程序入口
  11. 主题模型LDA理解与应用
  12. WPS Office 2012兼容全部Office格式,为办公带来了很多便利
  13. 12行代码获取1000万行手机号码归属地
  14. html中tab键的用法,利用Tab键快速创建html
  15. linux apache 查看mpm 配置方式,Apache Prefork、Worker和Event三种MPM详解
  16. mysql语句解决查询乱码_mysql5.0用命令行查询正常,但用sql就乱码,已经加了useUnicode=truecharacterEncoding=GBK,该如何处理 _ 搞代码...
  17. python 会计应用软件_下列关于会计核算软件记账功能的说法中,正确的有(  )。...
  18. 2021江苏地区高考成绩排名查询,江苏高考成绩排名查询系统,江苏高考位次排名查询...
  19. bzoj4084【SDOI2015】bigyration
  20. 天猫魔盒改无线打印服务器,图文教学天猫魔盒如何设置WIFI的过程

热门文章

  1. 如何配置syslog及修改默认端口号
  2. Bindiff430,Bindiff5,Bindiff6下载
  3. DRX不连续接收(2)-寻呼Paging
  4. 视图、索引文件的应用
  5. ettercap用法及参数
  6. FreeRadius 服务器环境搭建(PAP 版)
  7. [转载] Could not find module \atari_py\ale_interface\ale_c.dll (or one of its dependencies)
  8. 排序算法的时间复杂度汇总
  9. Sha1加密是不可逆的,网上虽然有解密的方法,但只能解密很简单的密码
  10. 鹅厂的这波青年,自发搭建了一套分布式大气监测系统