题目

滑雪是一道dp及记忆化搜索的经典题目。

所谓记忆化搜索便是在搜索的过程中边记录边搜索的一个算法。

当下次搜到这里时,便直接使用。

而且记忆化搜索一定要满足无后效性,为什么呢,因为如果不满足无后效性的话,可能在不同的时候调用这个值所产生的结果并不同。

因此一定要满足无后效性。

且记忆化搜索一定要用深搜,因为如果广搜的话,记忆化搜索就没有什么作用了。(因为广搜一定是先搜到最优结果)

再说滑雪这道题,可以用动态规划来做,当然也可以用记忆化搜索。

可以将dp数组当作记忆化搜索的数组

在记忆化搜索中如果已经搜到这个结果,就记录,当下次搜到这个地方时,看他是否有没有被记录过,如果记录过了,直接使用就好了。

滑雪这个题的意思便是当要其余四个方向的值的高度比要当前的高度大的时候,当前高度便是那四个方向的高度的最大值+1.

最后结果是从所有的点滑雪的最大值。

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int dx[]={-,,,};
int dy[]={,-,,};
int map[][];
int dp[][];
int r,c;
int m_search(int x,int y)
{
if(dp[x][y])
return dp[x][y];
int tot=;
for(int i=;i<;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(map[x][y]<map[nx][ny])
{
int tmp=m_search(nx,ny)+;
if(tmp>tot)
tot=tmp;
}
}
dp[x][y]=tot;
return tot;
}
int main()
{
memset(map,,sizeof(map));//一开始调为最小值
scanf("%d%d",&r,&c);
for(int i=;i<=r;i++)
for(int j=;j<=c;j++)
scanf("%d",&map[i][j]);
int ans=;
for(int i=;i<=r;i++)
for(int j=;j<=c;j++)
{
dp[i][j]=m_search(i,j);
ans=max(ans,dp[i][j]);
}
printf("%d\n",ans);
return ;
}

洛谷P1434滑雪题解及记忆化搜索的基本步骤的更多相关文章

  1. 洛谷P1192 台阶问题【记忆化搜索】

    题目:https://www.luogu.org/problemnew/show/P1192 题意: 给定n和k,一个人一次可以迈1~k步,问走n步有多少种方案. 思路: 本来傻乎乎上来就递归,显然会 ...

  2. 洛谷P1040 加分二叉树【记忆化搜索】

    题目链接:https://www.luogu.org/problemnew/show/P1040 题意: 某一个二叉树的中序遍历是1~n,每个节点有一个分数(正整数). 二叉树的分数是左子树分数乘右子 ...

  3. 洛谷3953 (NOIp2017) 逛公园——记忆化搜索+用栈判0环

    题目:https://www.luogu.org/problemnew/show/P3953 因为K只有50,所以想到用dp[ cr ][ j ]表示在点cr.比最短路多走了 j 的方案数.(看了TJ ...

  4. 洛谷 P1141【BFS】+记忆化搜索+染色

    题目链接:https://www.luogu.org/problemnew/show/P1141 题目描述 有一个仅由数字 0 与 1 组成的n×n 格迷宫.若你位于一格0上,那么你可以移动到相邻 4 ...

  5. 洛谷P3906 Hoof Paper, Scissor (记忆化搜索)

    这道题问的是石头剪刀布的的出题问题 首先不难看出这是个dp题 其次这道题的状态也很好确定,之前输赢与之后无关,确定三个状态:当前位置,当前手势,当前剩余次数,所以对于剪刀,要么出石头+1分用一次机会, ...

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

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

  7. 洛谷P1434滑雪讲解

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

  8. 洛谷P1434 滑雪

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

  9. 洛谷 - P1434 - 滑雪 - 有向图最长链

    https://www.luogu.org/problemnew/show/P1434 有向图的最长链怎么求?有环肯定不行,这里保证无环.(否则应该使用toposort先求出所有不带环的位置) 设dp ...

随机推荐

  1. List,DataTable实现行转列的通用方案

    最近在做报表统计方面的需求,涉及到行转列报表.根据以往经验使用SQL可以比较容易完成,这次决定挑战一下直接通过代码方式完成行转列.期间遇到几个问题和用到的新知识这里整理记录一下. 阅读目录 问题介绍 ...

  2. Python_老男孩练习题1

    get有陷阱:value   5.以下打印的内容是:——————    ——————    —————— [10, 'a'] [123] [10, 'a'] #方法一: 将list 转为 set #l ...

  3. H5 颜色属性

    07-颜色属性 我是段落 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  4. jQuery中.html(“xxx”)和.append("xxx")有什么区别

    append是追加,html是完全替换比如<p id="1"><p>123</p></p>$("#1").htm ...

  5. oc之考试答题类效果

    https://www.jianshu.com/p/ec29feb0b5a6 2017.07.27 11:48* 字数 424 阅读 615评论 9喜欢 11 demo地址:https://githu ...

  6. fun = [lambda x: x*i for i in range(4)] 本质解析/原理,LEGB规则 闭包原理

    命名空间,闭包原理,参考点击本文 一.问题描述 fun = [lambda x: x*i for i in range(4)] for item in fun: print(item(1)) 上述式子 ...

  7. Elasticsearch IK+pinyin

    如何在Elasticsearch中安装中文分词器(IK+pinyin)   如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题——中文词语被分成了一个一个的汉字 ...

  8. html总结:表格中的文字居中

    <style> table { text-align:center; } </style>

  9. Python之自测代码标识__name__=='__main__'

    __name__是python的默认的自测代码标识,其他文件导入该python文件时,不会执行这行代码以下部分. def yangfan(a): print('yangfan %s' %a) prin ...

  10. fileInput插件上传文件

    一.ftl <form action="" method="post" name="form" id="form" ...