洛谷—P1434 [SHOI2002]滑雪题解
题目链接: 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]滑雪题解相关推荐
- [洛谷]P1434 [SHOI2002] 滑雪
P1434 [SHOI2002] 滑雪 1.题目 2.分析 3.代码 1.map + dp 70 原因分析:当key相同时,map会覆盖掉先前的值!! 2.优先队列priority_queue + d ...
- 洛谷 P1434 [SHOI2002] 滑雪(优先队列+dp / 记忆化搜索)
P1434 [SHOI2002] 滑雪https://www.luogu.com.cn/problem/solution/P1434 优先队列+dp 本题状态转移方程一目了然 为了保证状态间无后效性, ...
- 洛谷P1434 [SHOI2002]滑雪
题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...
- 洛谷 P1434 [SHOI2002]滑雪(DP,记忆化搜索)
题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...
- 洛谷:P1434 [SHOI2002] 滑雪 题解
题目: P1434 [SHOI2002] 滑雪 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 本题关键字:记忆化搜索. 首先,这题为什么会想到记忆化?(知道的人直接跳过) 在dfs ...
- [P1434 [SHOI2002]滑雪](DFS,记忆化搜索)
P1434 [SHOI2002]滑雪 题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你 ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- 洛谷P2312 解方程题解
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
- 洛谷P1273 有线电视网 题解
洛谷P1273 有线电视网 题解 题目链接:P1273 有线电视网 题意: 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为 ...
最新文章
- 关于Input内容改变的触发事件
- Best Time to Buy and Sell Stock
- 营销 | 10个助燃商业增长的市场营销战略!
- python ks值计算_利用Python计算KS的实例详解
- 操作系统下查看HBA卡信息wwn的方法
- php图片编辑失真,PHP处理图片固定大小 不失真 不变形
- java并发初探ConcurrentHashMap
- linux驱动编写(pwm驱动)
- 《学习opencv》笔记——矩阵和图像处理——cvMax,cvMaxS,cvMerge,cvMin and cvMinS
- C语言中的main函数为什么被称作程序入口
- 主题模型LDA理解与应用
- WPS Office 2012兼容全部Office格式,为办公带来了很多便利
- 12行代码获取1000万行手机号码归属地
- html中tab键的用法,利用Tab键快速创建html
- linux apache 查看mpm 配置方式,Apache Prefork、Worker和Event三种MPM详解
- mysql语句解决查询乱码_mysql5.0用命令行查询正常,但用sql就乱码,已经加了useUnicode=truecharacterEncoding=GBK,该如何处理 _ 搞代码...
- python 会计应用软件_下列关于会计核算软件记账功能的说法中,正确的有( )。...
- 2021江苏地区高考成绩排名查询,江苏高考成绩排名查询系统,江苏高考位次排名查询...
- bzoj4084【SDOI2015】bigyration
- 天猫魔盒改无线打印服务器,图文教学天猫魔盒如何设置WIFI的过程
热门文章
- 如何配置syslog及修改默认端口号
- Bindiff430,Bindiff5,Bindiff6下载
- DRX不连续接收(2)-寻呼Paging
- 视图、索引文件的应用
- ettercap用法及参数
- FreeRadius 服务器环境搭建(PAP 版)
- [转载] Could not find module \atari_py\ale_interface\ale_c.dll (or one of its dependencies)
- 排序算法的时间复杂度汇总
- Sha1加密是不可逆的,网上虽然有解密的方法,但只能解密很简单的密码
- 鹅厂的这波青年,自发搭建了一套分布式大气监测系统