首页 > 其他分享 >搜索学习笔记

搜索学习笔记

时间:2023-02-10 09:44:29浏览次数:53  
标签:状态 mem 笔记 学习 搜过 搜索 dfs 数组

搜索,也就是对状态空间进行枚举,通过穷尽所有的可能来找到最优解,或者统计合法解的个数。——oi wiki


1.DFS 深度优先搜索

实现:递归(栈)
特点:不找到一个答案不回头
用途:可行性 找单个解等

个人所用模板如下:
image

例题:P1019 [NOIP2000 提高组] 单词接龙


2.BFS 广度优先搜索

实现:队列
特点:一层一层向下搜
用途:最短路等

个人所用模板如下:
image

例题:P1825 [USACO11OPEN]Corn Maze S

不难发现 实际上 dfs 与 bfs 的共同点 也是本人认为搜索的核心 即为“枚举能到达的所有状态” 使用搜索时 我们考虑的核心便是状态与如何进行状态转移 这点可以参考 dp 时设计状态与状态转移的思路


3.记忆化搜索

在暴力搜索中 同一状态可能会被重复搜索多次 浪费大量时间

这时我们就可以使用记忆化搜索 开一个 mem 数组记录已搜过的状态

传 世 经 典 : P1048 [NOIP2005 普及组] 采药
我们以此题为例 介绍一下如何使用记忆化搜索

首先根据上面的 dfs 板子 很容易写出这样的暴力:
image
其中 x 表示当前物品编号 left 表示剩余时间

这时我们分析 dfs 时记录的状态 即编号 时间两个维度
那么我们的 mem 数组也开两个维度 记录已搜过的状态

最开始时初始化所有 mem 数组为 -1 即这个状态没有搜过
然后我们将函数返回值改为一个数 return时要返回 mem 数组的值
image

标签:状态,mem,笔记,学习,搜过,搜索,dfs,数组
From: https://www.cnblogs.com/Steven24/p/17107781.html

相关文章

  • 学习笔记——redis持久化之RDB、AOF
    2023-02-10一、redis提供了2个不同形式的持久化方式1、RDB(RedisDataBase)2、AOF(AppendOfFile)二、RDB的定义RDB是在指定的时间间隔内将内存中的数据集快照写入磁盘,即......
  • docker管理基础笔记
    CMD指令     Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被dockerrun之后的参数替换掉      ENTRYPOINT指令     有别于CMD......
  • PLC入门笔记3
    熟悉开发环境工具下载官网失效软件安装官网失效第一次PLC之旅走廊灯两地控制案例PLC型号确定梯形图(LAD)和指令表(STL)两种编程方式程序编辑符号变量类型数据类型......
  • Splay学习笔记
    Splay学习笔记说在前面:本文多参考这篇优秀博文,讲的十分详细,以下是我个人对Splay的理解。一、普通Splay例题传送门(一)前置知识:前驱:当前序列中小于目标数字的数的最......
  • 读Java实战(第二版)笔记06_新的日期和时间API
    1. Java8之前的库对日期和时间的支持非常不理想2. TemporalField接口2.1. 定义了如何访问temporal对象某个字段的值的接口2.2. ChronoField枚举2.2.1. 实现Temp......
  • 第二十二天python3 classmethod、staticmethod、property装饰器学习笔记
    classmethod1、在类定义中,使用@classmethod装饰器修饰的方法;2、必须至少有一个参数,且第一个参数留给了cls,cls指代调用者即类对象自身;3、cls这个标识符可以是任意合法名......
  • [数据结构] 二叉搜索树 (二叉排序树)
    二叉搜索树二叉搜索树的基本概念二叉搜索树(BinarySearchTree)也称二叉排序树,是一种各节点值之间存在一定次序关系的二叉树。二叉搜索树的特点一般情况下,二叉搜索树......
  • 深度学习笔记——线性回归
    #导入相关包importtensorflowastfimportnumpyasnpimportpandasaspdimportmatplotlib.pyplotasplt%matplotlibinline#读取数据data=pd.read_csv('......
  • linux学习
    Linux是什么Linux是一个开源,免费的操作系统,具有稳定性,安全性,处理多并发。目前很多企业级的项目(c/c++/php/python/java/go)都会部署到linux/unix系统上linux的应用领域......
  • POJ--2456 Aggressive cows(二分搜索/最大化最小值)
    记录22:552023-2-9http://poj.org/problem?id=2456reference:《挑战程序设计竞赛(第2版)》3.1.3p142DescriptionFarmerJohnhasbuiltanewlongbarn,withN(2......