题目链接:##

here we go

题外话:##

谁能想到这是一道咕了两年的\(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]滑雪的更多相关文章

  1. 洛谷 P1434 [SHOI2002]滑雪

    这道题适合记忆化练手 毕竟总有些大佬虐题. 这个题有几个剪枝 1.记忆化 这个不用多说了吧 剪枝就是 如果 当前点到下面一个点的目前下降的高度+1 小于 下面那个点 能下降的高度 那么反过来,这个点不 ...

  2. 洛谷P1434 [SHOI2002]滑雪

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

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

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

  4. 洛谷 P1434 [SHOI2002]滑雪 解题报告

    这题方法有很多, 这里介绍2种: 方法1 很容易想到搜索, bfs或dfs应该都可以, 就不放代码了: 方法2 这题还可以用 dp 来做. 做法:先将每个点按照高度从小到大排序,因为大的点只能向小的点 ...

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

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

  6. 洛谷P1434滑雪讲解

    题源:[戳这里] 洛谷博客链接:[戳这里] 我觉得这道题主要方法应该有两种: 动态规划 搜索 下面会分别对这两种方法进行简述 一,动态规划法首先的想法是用L(i,j)表示从点(i,j)出发能到达的最长 ...

  7. BZOJ1935或洛谷2163 [SHOI2007]园丁的烦恼

    BZOJ原题链接 洛谷原题链接 很容易想到二维前缀和. 设\(S[i][j]\)表示矩阵\((0, 0)(i, j)\)内树木的棵数,则询问的矩形为\((x, y)(xx, yy)\)时,答案为\(S ...

  8. 洛谷P1434滑雪题解及记忆化搜索的基本步骤

    题目 滑雪是一道dp及记忆化搜索的经典题目. 所谓记忆化搜索便是在搜索的过程中边记录边搜索的一个算法. 当下次搜到这里时,便直接使用. 而且记忆化搜索一定要满足无后效性,为什么呢,因为如果不满足无后效 ...

  9. 洛谷 p1434 滑雪【记忆化搜索】

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

随机推荐

  1. 【USACO OPEN 10】hop

    奶牛们正在回味童年,玩一个类似跳格子的游戏,在这个游戏里,奶牛们在草地上画了一行N个格子,(3 <=N <= 250,000),编号为1..N. 就像任何一个好游戏一样,这样的跳格子游戏也 ...

  2. HDU2068 RPG的错排 —— 错排

    题目链接:https://vjudge.net/problem/HDU-2068 RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Lim ...

  3. APTM敏捷性能测试模型

    随着应用系统的日趋复杂,仅在系统测试和验收测试阶段执行性能测试已经不能满足迟早发现和解决系统性能瓶颈的要求,Connie Smith博士和Lloyd Winlliams博士在他们提出 的软件性能工程( ...

  4. 腾讯Hermes设计概要——数据分析用的是列存储,词典文件前缀压缩,倒排文件递增id、变长压缩、依然是跳表-本质是lucene啊

    转自:http://data.qq.com/article?id=817 三.Hermes设计概要 架构描述 系统核心进程均采用分散化设计,根据业务发展需求,可随意扩缩容机器; 周期性数据直接通过td ...

  5. 谈谈嵌套for循环的理解

    谈谈嵌套for循环的理解     说for的嵌套,先说一下一个for循环的是怎么用的.      这次的目的是为了用for循环输出一个乘法口诀表,一下就是我的一步步理解.    一.   语法:   ...

  6. C语言system()函数:执行shell命令

    头文件:#include <stdlib.h> 定义函数:int system(const char * string); 函数说明:system()会调用fork()产生子进程, 由子进 ...

  7. BZOJ_2716_[Violet 3]天使玩偶&&BZOJ_2648_SJY摆棋子_KDTree

    BZOJ_2716_[Violet 3]天使玩偶&&BZOJ_2648_SJY摆棋子_KDTree Description 这天,SJY显得无聊.在家自己玩.在一个棋盘上,有N个黑色棋 ...

  8. SP8093 JZPGYZ - Sevenk Love Oimaster

    传送门 广义后缀自动机-- 其实也不是很难理解,就是每次SAM插入一个串之后,插入新的串的时候,要把last重新调到1的位置,共用一些节点. 这个题我们首先要预处理出来每个状态被多少个串共用.挺暴力的 ...

  9. 修改Linux内核参数提高Nginx服务器在高的时候的性能

    并发 Linux下高并发的Nginx服务器,当TCP TIME_WAIT套接字数量经常达到两.三万,服务器很容易被拖死.通过修改Linux内核参数,可以减少Nginx服务器的TIME_WAIT套接字数 ...

  10. sizeToFit的学习与认知

    今天一扫前两日的坏心情,终于有心情平静下来,今天我是根据网络上的一些资料进行学习,今天学习的内容是 sizeToFit() 方法在不方便手动布局的场景中的使用. 首先感谢资料的提供者:参考1 参考2 ...