[洛谷P1434] [SHOI2007]滑雪
题目链接:##
题外话:##
谁能想到这是一道咕了两年的\(AC\)呢……当年是在搜索还半懂不懂的时候遇到的这道题,感觉真是难得要命()所以一直拖着不做,后面就下意识地逃避了搜索相关的内容(慢慢变菜
(然后学树形\(dp\)数位\(dp\)的时候强行线性\(dp\)经常推不出被搞疯了)
咳咳,所以终于回来把这道题做了,也算是还债了吧。
有时候感觉自己真是像一头从小被拴在木桩上的象,习惯了之后就从来没想过去挑战一下尝试一下什么的,越来越惰怠,当然只能越来越弱了啊(
题目分析:##
首先这个题是一个很经典的记忆化搜索例题,经典到讲记忆化搜索十个教练有八个都会把这道题搬出来当例题。
所谓记忆化搜索,其本质仍然是递归。但由于递归时有许多重复的状态,所以会耗时巨大,而记忆化搜索以动态规划的方式记录了之前所计算过的状态,下次需要这个状态的时候不需要重新递归计算,而是可以直接拿来用,这样可以节省大量时间。
对于这个题,我们记录搜索到每一个点的最大路径长度,这样下次需要用这个点的时候就不需要再一次递归到头,而是直接调用即可。
顺便,我看题解里有不少判边界的(无限加高的,打判断的),其实可以反过来考虑,把滑雪看成爬坡,每一个\(dfs\)的点只能往高处走,这样递归的判断应该是
if(Map[x][y]<Map[go_x][go_y]) {
...
}
而\(Map[]\)数组的初始值是\(0\),即边界的\(Map\)值都是\(0\),所以走到边界的时候这个判断语句的返回值永远是\(false\),直接规避了边界问题
对着每一个点\(dfs\)一遍(即把每个点当做终点搜一遍)取最大即可。
代码:##
#include <bits/stdc++.h>
#define N (100+5)
using namespace std;
inline int read() {
int cnt = 0, f = 1; char c;
c = getchar();
while (!isdigit(c)) {
if(c == '-') f = -f;
c = getchar();
}
while (isdigit(c)) {
cnt = cnt * 10 + c - '0';
c = getchar();
}
return cnt * f;
}
int r, c;
int ans=-1;
int mapp[N][N], step[N][N];
const int fx[4] = {0, 1, 0, -1};
const int fy[4] = {1, 0, -1, 0};
int Dfs(int x, int y) {
if(step[x][y]) return step[x][y];
step[x][y] = 1;
for (register int i = 0; i <= 3; i++) {
int gx = x + fx[i]; int gy = y + fy[i];
if(mapp[x][y] < mapp[gx][gy])
step[x][y] = max(step[x][y], Dfs(gx, gy) + 1);
}
return step[x][y];
}
int main() {
r = read();
c = read();
for (register int i = 1; i <= r; i++)
for (register int j = 1; j <= c; j++)
mapp[i][j] = read();
memset(step, 0, sizeof(step));
for (register int i = 1; i <= r; i++)
for (register int j = 1; j <= c; j++)
ans = max(ans, Dfs(i, j));
printf("%d\n", ans);
return 0;
}
[洛谷P1434] [SHOI2007]滑雪的更多相关文章
- 洛谷 P1434 [SHOI2002]滑雪
这道题适合记忆化练手 毕竟总有些大佬虐题. 这个题有几个剪枝 1.记忆化 这个不用多说了吧 剪枝就是 如果 当前点到下面一个点的目前下降的高度+1 小于 下面那个点 能下降的高度 那么反过来,这个点不 ...
- 洛谷P1434 [SHOI2002]滑雪
题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...
- 洛谷 P1434 [SHOI2002]滑雪(DP,记忆化搜索)
题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...
- 洛谷 P1434 [SHOI2002]滑雪 解题报告
这题方法有很多, 这里介绍2种: 方法1 很容易想到搜索, bfs或dfs应该都可以, 就不放代码了: 方法2 这题还可以用 dp 来做. 做法:先将每个点按照高度从小到大排序,因为大的点只能向小的点 ...
- 洛谷-P1434 [SHOI2002]滑雪 (记忆化搜索)
题意:有一个\(R*C\)的矩阵,可以从矩阵中的任意一个数开始,每次都可以向上下左右选一个比当前位置小的数走,求走到\(1\)的最长路径长度. 题解:这题很明显看到就知道是dfs,但是直接爆搜会TLE ...
- 洛谷P1434滑雪讲解
题源:[戳这里] 洛谷博客链接:[戳这里] 我觉得这道题主要方法应该有两种: 动态规划 搜索 下面会分别对这两种方法进行简述 一,动态规划法首先的想法是用L(i,j)表示从点(i,j)出发能到达的最长 ...
- BZOJ1935或洛谷2163 [SHOI2007]园丁的烦恼
BZOJ原题链接 洛谷原题链接 很容易想到二维前缀和. 设\(S[i][j]\)表示矩阵\((0, 0)(i, j)\)内树木的棵数,则询问的矩形为\((x, y)(xx, yy)\)时,答案为\(S ...
- 洛谷P1434滑雪题解及记忆化搜索的基本步骤
题目 滑雪是一道dp及记忆化搜索的经典题目. 所谓记忆化搜索便是在搜索的过程中边记录边搜索的一个算法. 当下次搜到这里时,便直接使用. 而且记忆化搜索一定要满足无后效性,为什么呢,因为如果不满足无后效 ...
- 洛谷 p1434 滑雪【记忆化搜索】
<题目链接> Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
随机推荐
- codeforces 509 B题 Painting Pebbles
转载地址:http://blog.csdn.net/nike0good/article/details/43449739 B. Painting Pebbles time limit per test ...
- Gym - 100676E —— 基础题
题目链接:https://odzkskevi.qnssl.com/1110bec98ca57b5ce6aec79b210d2849?v=1490453767 题解: 这种方法大概跟离散化扯上点关系:首 ...
- html5--3.17 新增的表单重写
html5--3.17 新增的表单重写 学习要点 对form元素的属性做一个小结,对个别属性进行一点补充 重点掌握新增的表单重写 form元素的属性小结 action/method/enctype/n ...
- 【转】C#中使用Redis学习二 在.NET4.5中使用redis hash操作
摘要 上一篇讲述了安装redis客户端和服务器端,也大体地介绍了一下redis.本篇着重讲解.NET4.0 和 .NET4.5中如何使用redis和C# redis操作哈希表.并且会将封装的一些代码贴 ...
- javaScrpit中NaN的秘密
NaN,不是一个数字,是一种特殊的值来代表不可表示的值,使用typeof或其他任何与之比较的处理方式,‘NaN’则会引起一些混乱, 一些操作会导致NaN值的产生.这里有些例子: Math.sqrt(- ...
- OpenCV——PS滤镜 水波效果
// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...
- Oracle中CASE WHEN的用法实例
实例演示: (1)查询表users中的数据. select u.id,u.realname,U.SEX from users u; 查询结果如下 ID REALNAME SEX 1 10082 ...
- docker三剑客之一docker compose
compose有两个重要的概念: 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例 项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker- ...
- c语言中的# ## 可变参数宏 ...和_ _VA_ARGS_ _
1.#假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串.例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字 ...
- dom4j的解析实例
book.xml数据如下: <books> <book> <author>Thomas</author> <title>Java从入门到放弃 ...