首页 > 其他分享 >(长期更新)DP 学习笔记

(长期更新)DP 学习笔记

时间:2024-10-09 16:48:03浏览次数:9  
标签:状态 顺序 拓扑 更新 DAG 笔记 转移 DP

DP 的本质

一般 DP 的本质

  • 状态:点。(带了值)
  • 转移:边。
  • DP:在 DAG 上推。(得到 / 更新 点的值)

特殊(类似 DP)

图不是 DAG。有两种思路:

  • 解方程
    • 简单的:直接解(比如只有一个环)。
    • 复杂的:高斯消元。
      • 高斯消元。
      • 高斯-约旦消元。
  • 图论
    • 类似最短路:
      • Dijkstra 算法 / 类似 Dijkstra 的算法。
      • SPFA 算法 / 类似 SPFA 的算法。
    • 其他的我可能还不知道。

DP 的要素

(我目前想起来的。)

  • 状态。无后效性,设计方式:把之后要用的全部塞进状态里。
  • 转移方程。就近转移,不重不漏。最值(min、max)、其他运算。
  • 初值。按定义 / 为了转移后得到的状态的值正确。[也许要为了之后正确用奇怪的定义。](?)(好像是 重返现世 那题)。[注意特殊情况。](之前写的,现在不知道例子是什么)
  • 最终答案。可能是一个状态,可能是多个状态运算起来。

可能一般按 状态 -> 转移方程 -> 初值、最终答案 的顺序思考。

DP 的转移方式

之前听说叫“填表法”和“刷表法”。

推到其他状态

在当前状态上做改动。个人认为更符合正向思维。

似乎转移对应关系复杂的时候用这种方式比较清晰方便。

从其他状态转移来

找之前的状态。个人认为更符合逆向思维。

似乎更常用。

似乎在决策方面优化 DP 的时候常用。比如 单调栈、单调队列、斜率、决策单调性、线段树之类的 DS 大力找决策点 优化 DP。

DP 的转移顺序

按拓扑序

(我知识水平非常有限,不太了解拓扑序,这里说拓扑序可能不止一种是不严谨的或错误的,但是就是这个意思 qwq。)

一般的转移顺序。本质上是按照 DAG 的拓扑序。

注意拓扑序可能不止一种,有时换一种顺序可能可以优化 DP,换顺序如:二维状态的 DP,先枚举哪一维后枚举哪一维可能可以颠倒。(如:把序列分割成给定个数个区间的题。)

记忆化搜索

避免了转移顺序的问题。

注意初始化 \(vis\) 数组(或者直接把 \(f\) 初始化成 \(-1\) 之类的)。

时间复杂度[一般要](?)结合状态数来分析,但不一定等于状态数,可能还要算上转移和其他的代价。(如二维区间 DP。)

典型例子是数位 DP、二维区间 DP。

标签:状态,顺序,拓扑,更新,DAG,笔记,转移,DP
From: https://www.cnblogs.com/huangkxQwQ/p/18454598

相关文章

  • dp泄露
    一直在抄脚本,终于想着来看看原理了。dp是什么? dp=dmod(p-1)基本前备知识 e*d=1modϕ(n)那么开推吧dp=dmod(p-1)-->dp*e=e*dmod(p-1)-->e*d=dp*emod(p-1)-->e*d=dp*e +k1*(p-1)       -->dp*e+k1*(p-1)=1mod......
  • spring上 -基于Xml配置bean笔记
    4,Spring内容   7,快速入门 需求:通过Spring的方式[配置文件],获取JavaBean:Monster的对象,并给该的对象属性赋值,输出该对象信息.代码结构:lib目录是自己创建的,然后再引入5个jar包 源码:beans.xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="......
  • 决策单调性DP
    决策单调性DP是一个非常重要的DP类别。在决策点随枚举点增加单调不降时,可以有效地优化复杂度。一般而言,决策点指的是对于一个\(f[i]\),它的值需要从另一个值j中转移,而对于所有j,令\(f[i]\)最大的j值就是决策点。而其单调性体现在对于一个点i,它的决策点一定会大于等于i-1的......
  • prometheus学习笔记之黑盒探针blackbox_exporter
    项目地址:https://github.com/prometheus/blackbox_exporter一、安装blackbox_exporterwgethttps://github.com/prometheus/blackbox_exporter/releases/download/v0.25.0/blackbox_exporter-0.25.0.linux-amd64.tar.gztarxfblackbox_exporter-0.25.0.linux-amd64.tar.gz-......
  • 【读书笔记·VLSI电路设计方法解密】问题3:在最新工艺下,数百万-千万门级电路设计的挑战
    在超深亚微米(90纳米及以下,本书成于2007年)环境下设计一个系统级芯片(数千万门及以上)是一项同时解决许多复杂且相互依赖问题的任务。所需的设计/实施/验证方法论是一个动态发展的过程,因为随着工艺技术的不断进步,所涉及的挑战也在不断变化。今天最突出的挑战如下:时序闭合。时序闭......
  • (LeetCode 热题 100) 1143. 最长公共子序列(动态规划dp)
    题目:1143.最长公共子序列思路:经典动态规划dp题型,时间复杂度为0(n^2)。C++版本:classSolution{public:intlongestCommonSubsequence(stringtext1,stringtext2){intn=text1.size(),m=text2.size();//状态f[i][j]表示:text1[0,i]和text2[0......
  • Mysql主从复制记录笔记
    一、主机的配置[mysqld]log-bin=mysql-binbinlog-do-db=test2024binlog-ignore-db=mysqlbinlog-ignore-db=information_schemabinlog-ignore-db=performance_schemaserver-id=1二、从机的配置server-id=2log-bin=mysql-binbinlog-do-db=test2024binlog-ignore-db=mysqlbinlog-ig......
  • maven笔记
    maven基本概念仓库坐标依赖管理生命周期与插件maven“专家”“内行”,本质是项目管理工具把项目开发和进程管理抽象成项目对象模型POM(ProjectObjectModel)基本概念仓库本地仓库:本地仓库,默认在user目录下.m2/repository,连接远程仓库获取资源远程仓库:分为......
  • 《机器学习初步》笔记
    第一章绪论1.1引言机器学习的经典定义:利用经验(数据)改善系统自身的性能经典的机器学习过程:机器学习最重要的理论模型:PAC(概览近似正确)1.2基本术语数据集:一组记录的集合学习/训练:通过执行某个学习算法,得到模型,学的的模型对应数据的某种潜在规律示例:不包含结果(标记label)......
  • 提示工程学习笔记
    提示工程(PromptEngineering)是一种通过设计和优化给定的提示(Prompt)来控制AI生成内容质量的技术。对于使用大型语言模型(如OpenAI的GPT系列),提示的设计和优化对生成结果的准确性和相关性至关重要。在这个学习笔记中,我将涵盖提示工程的基础概念、关键技巧以及如何逐步提高生成结果的质......