码迷,mamicode.com
首页 > 其他好文 > 详细

记忆化搜索

时间:2018-10-01 23:46:27      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:计数   org   总结   tps   dfs   https   思想   遇到   动态   

记忆化搜索

什么是记忆化搜索?

  • 百度百科:算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存。
  • 个人理解:就是每求到一个状态就保存下来,下次再遇到这个状态直接调用即可

它有什么好处?

  1. 用记搜容易理解。避免了dp的高思维难度
  2. 快。因为每个状态只会算一遍,所以相对与深搜和广搜会快许多
  3. 好写。

如何实现?

  • 算法流程图如下:
#include <iostream>
#include <cstdio>

int dfs(int x)
{
    if(状态[x]保存过) return 状态[x];
    if(到达目的地) return 递归最底层的解
    int tot=0;  //执行到这里说明状态[x]没被保存过,定义变量tot为方案数
    for(int i=1;i<=算符种数;i++)
        tot+=分支方案数
    状态[x]=tot;
    return 状态[x];
}

int main()
{
    cout<<dfs(x); //输出以x为开始的方案数
    return 0;
}

总结

  • 记忆化搜索是个非常功利性的算法。有时候在考场中写正解dp可能要想很久,甚至边界设置错误导致全WA,而记忆化搜索容易写,且易理解,所以掌握好是很必要的。
  • 记忆化搜索是一种思想,并不是所有的记搜都按照算法模版写的,而是因题而异。但思想是一致的,多刷几道题即可熟练掌握
  • 题目列表:
    • 洛谷P4017 最大食物链计数:传送门(巧妙利用记搜代替了dp)
    • 洛谷P1434 [SHOI2002]滑雪:传送门(巧妙利用记搜比dfs快的优势)

记忆化搜索

标签:计数   org   总结   tps   dfs   https   思想   遇到   动态   

原文地址:https://www.cnblogs.com/BigYellowDog/p/9736028.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!