算法 | 动态dp学习笔记 | 未完待更

动态规划(DP)及相关经典问题讲解 前言 动态规划(DP)是计算机编程算法中非常重要的一个知识点,无论是校招 社招,面试官也经常喜欢出此类的编程题来考察面试者的编程能力, 这篇博客主要是概述一下dp的主要思想 然后重点归纳一下leetcode中 股票交易问题的讲解。 DP基础知识 DP简单可以总结为“一个模型三个特征”。 “一个模型”是指动态规划适合解决的问题的模型,也就是多阶段决策最优解模型(这个模型同时也是回溯 贪心解决问题的模型)。一般用动态规划解决最优问题时,解决问题需要经历多个决策阶段。每个决策阶段都对应着一组状态。然后我们寻找一 阅读详情

动态dp学习笔记?

前置知识
  • 树链剖分
  • 简单树形dp
  • 矩阵乘法
什么是动态dp

对一个dp进行修改操作…

传统做法是使用树链剖分…一条重链一条重链地进行dp

从例题入手——

luogu4719 【模版】动态dp

参考博文

很简单我们可以设出这么一个dp状态

d p [ u ] [ 0 / 1 ] dp[u][0/1] dp[u][0/1]其中 0 0 0表示不在集合里面的最大值, 1 1 1则表示在集合里面的最大值

那么有转移式子
d p [ u ] [ 0 ] = ∑ v ∈ s o n u m a x ( d p [ v ] [ 0 ] , d p [ v ] [ 1 ] ) dp[u][0]=\sum_{v \in {son}_u}max(dp[v][0],dp[v][1]) dp[u][0]=v∈sonu​∑​max(dp[v][0],dp[v][1])

d p [ u ] [ 1 ] = ∑ v ∈ s o n u d p [ v ] [ 0 ] dp[u][1]=\sum_{v \in son_u}dp[v][0] dp[u][1]=v∈sonu​∑​dp[v][0]

换句话说我们采取一种dfs和bfs混合的方式遍历这颗树,

每次到达一个重链的顶部的时候我们直接将这个重链全部塞到队列里,

然后我们递归下去遍历和重链相连的所有重链,最后处理这个重链,

当处理完这个重链之后我们发现我们已经处理完了这个重链顶所在的子树了

那么我们对于重链上的每一个点…先根据轻儿子的dp值 l d p [ u ] [ 0 / 1 ] ldp[u][0/1] ldp[u][0/1]
l d p [ u ] [ 0 ] = ∑ v ∈ l i g h t s o n u m a x ( d p [ v ] [ 0 ] , d p [ v ] [ 1 ] ) ldp[u][0]=\sum_{v \in lightson_u}max(dp[v][0],dp[v][1]) ldp[u][0]=v∈lightsonu​∑​max(dp[v][0],dp[v][1])

l d p [ u ] [ 1 ] = ∑ v ∈ l i g h t s o n u d p [ v ] [ 0 ] ldp[u][1]=\sum_{v \in lightson_u} dp[v][0] ldp[u][1]=v∈lightsonu​∑​dp[v][0]

那么我们就可以根据轻儿子的dp值跑dp
d p [ u ] [ 0 ] = l d p [ u ] [ 0 ] + m a x ( d p [ u . h e a v y s o n ] [ 0 ] , d p [ u . h e a v y s o n ] [ 1 ] ) dp[u][0]=ldp[u][0]+max(dp[u.heavyson][0],dp[u.heavyson][1]) dp[u][0]=ldp[u][0]+max(dp[u.heavyson][0],dp[u.heavyson][1])

d p [ u ] [ 1 ] = l d p [ u ] [ 1 ] + d p [ u . h e a v y s o n ] [ 0 ] dp[u][1]=ldp[u][1]+dp[u.heavyson][0] dp[u][1]=ldp[u][1]+dp[u.heavyson][0]

这样的转换使得树上问题转变成了序列上的问题

我们就可以使用线段树维护重链上的值

具体来讲,当我们修改一个点的值的时候,我们在对应的重链的线段树上进行修改,

此时会改变重链顶部的dp值,然后会改变重链顶的father的ldp值,

然后又对应了线段树上的单点修改,此时又会改变另一个重链顶的dp值,

那么如何在线段树上维护dp值呢???
  • 我们将转移变成floyd的矩阵乘法形式

C i , j = m a x k ( A i , k + B k , j ) C_{i,j}=max_k(A_{i,k}+B_{k,j}) Ci,j​=maxk​(Ai,k​+Bk,j​)

  • 加法对乘法和min,max运算都具有分配律·

那么就可以用树链剖分维护啦…

但是…树链剖分可以被特意构造的数据卡成 O ( n l o g n 2 ) O(nlog^2_n) O(nlogn2​)(链式堆(根号n个长度为根号n的链连成完全二叉树的形状))

就在这个时候全局平衡二叉树出现啦

线段树只是局部平衡…

我们在建全局平衡二叉树的时候

将每一个节点附上一个权值,权值为它所有轻儿子的siz之和+1,然后我们每次找这个链的带权重心,把他作为这一级的父亲,然后递归两边进行建bst

总结

当你学会了有动态dp这个东西的时候…

其实怎么样将dp转移转换成可以用线段树或者全局平衡二叉树维护的矩阵乘法就成为了关键…

这种将树上dp转换成序列dp用数据结构维护的思想是关键。

【学习笔记】动态规划—各种 DP 优化 设 j=p∗v[i]+r�=�∗�[�]+�,那么原方程可改为: dp[p∗v[i]+r]=max{dp[r+k∗v[i]]+(p−k)∗w[i]}��[�∗�[�]+�]=���{��[�+�∗�[�]]+(�−�)∗�[�]} (r∈[0,v[i]−1],(�∈[0,�[�]−1], p∈[1,⌊(V−r)/v[i]⌋],�∈[1,⌊(�−�)/�[�]⌋], k∈[p−min(⌊V/w[i]⌋,c[i]),p])�∈[�−���(⌊�/�[�]⌋,�[�]),�]) 阅读详情

相关推荐

PaddleOCR 3.x 最新版使用教程(2025)——从安装到实战身份证识别,一步到位!

本文针对PaddleOCR 3.x大版本更新带来的参数变化和兼容性问题,提供从环境配置到实际应用的全流程解决方案。

qq_58607032的博客 9787

动态DP入门&线性动态DP

OI-WiKi上有一个动态DP讲解,直接讲到了树型DP领域,同时需要树链剖分,门槛有点高。本文针对线性DP做一个动态DP的讲解。首先当然要懂得一定的DP的相关知识,然后需要知道DP方程的矩阵表达。可以看这里——根据递推公式构造系数矩阵用于快速幂。很多DP的状态转移方程都可以写成矩阵形式,由此就有了矩阵快速幂优化和动态DP的基础。特别是本文专门举例的线性DP。

RBS的专栏 2132

王爽《汇编语言》课程设计2(不涉及软盘版本)

assume cs:code,ds:data,ss:stack stack segment db 128 dup (0) stack ends data segment db 256 dup (0) data ends code segment start: mov ax,stack mov ss,ax mov sp,128 ...

weixin_41944412的博客 1178

【动态dp】

矩阵常数大,可以只维护矩阵中有用的信息。 本质是带修改的dp。当某一类dp的某一状态要求修改时,我们可以用数据结构优化转移,使修改后重新做一次dp的复杂度是O(c∗log⁡N)O(c*\log N)O(c∗logN)。 写出朴素dp方程。 根据方程选择转移方法:广义矩阵乘法或数据结构pushup 8.6.1.简单的方程——广义矩阵乘法中转移 适用条件:形如fi=(fi−1⊗a)⊕fi−1⊕c⊕⋯f_i=(f_{i-1}\otimes a) \oplus f_{i-1} \oplus c\oplus \c

Brilliance_Z的博客 2039

IGBT单管并联方案全解析:从均流设计到热管理实战技巧

本文深入解析了IGBT单管并联技术在新能源车电驱系统中的应用,重点探讨了均流设计与热管理实战技巧。通过优化寄生电感控制、动态均流和驱动电路设计,提升系统稳定性和效率,为工程师提供了一套完整的解决方案。

weixin_28720573的博客 441

手把手教你用STM32实现SPWM逆变器控制(附完整代码)

本文详细介绍了如何使用STM32微控制器实现SPWM逆变器控制,包括硬件设计、PWM生成配置、正弦表生成与DMA传输,以及闭环控制与性能优化。通过完整的代码示例和实测数据,帮助开发者快速掌握SPWM技术,应用于新能源和电力电子领域。

weixin_29296241的博客 317

动态dp(ddp)

详细讲解动态dp。

wanglianda2007的博客 709

电化学阻抗谱(EIS)在锂离子电池中的应用

摘要电化学阻抗谱(electrochemical impedance spectroscopy, EIS)是一种重要的电化学测试方法,在锂离子电池动力学反应机理研究及动力学参数测量等方面具有广泛的应用。在锂离子电池运行过程中,各反应步骤的动力学参数及时间常数不同,而EIS可以在较宽的频率范围内对体系施加小幅正弦激励信号,使得在特定频率下突出特定时间常数的电极过程,从而将复杂的电极过程分离,实现单一电极过程动力学的分析。通过对交流阻抗信息的研究,也可以为锂离子电池及其他电池的应用与管理、电化学过程设计及电极材

qiushireader的博客 2650

动态规划【DP】详细解释

动态规划算法的复杂度和空间利用率很高,适用于求解一些比较复杂的最优化问题,例如背包问题、最长递增子序列问题、编辑距离问题等。无后效性:状态只与其之前的状态有关,和之后的状态无关。这种性质被称作“无后效性”,即在求解阶段,我们不必关心状态是如何转移过来的,只需要关注现在的状态和后续状态。(除去起点)中的所有点恰好一次,回到起点的最小代价,通过循环方式依次求出每一个状态并存储它的最小代价值,最终返回从起点出发,经过点集。好的,再举一个十分复杂的例子,以解决旅行家问题为例子,我们来详细介绍动态规划的思想和步骤。

Chey_LER_SLC的博客 2235

雷达原理习题答案【西电】

  目前教材用的是陈老师新版的,但是,我发现课后题有一部分是之前某本书里的。答案如下【建议参看原题→查阅答案】 【原题点这里!!点这里!!】 目录跳转功能目前好像只支持网页版 文章目录% 第一章、第二章% 第三章% 第四章% 第五章% 第六章% 第七章% 第八章 % 第一章、第二章 % 第三章 % 第四章 % 第五章 % 第六章 % 第七章 % 第八章 ...

薛定谔的壳的博客 1万+

【华为OD机试真题E卷】474、推荐多样性 | 机试真题+思路参考+代码解析(E卷复用)(C++、Java、Py)

题目描述 >推荐多样性需要从多个列表中选择元素,一次性要返回 N 屏数据(窗口数量),每屏展示 K 个元素(窗口大小),选择策略:   各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列表中为每屏选择一个元素,依次类推   每个列表的元素尽量均分为 N 份,如果不够 N 个,也要全部分配完,参考样例图:

KJ.JK 4434

算法之动态规划总结(11种DP类型,70道全部搞懂)

简介 参考文章,将所有的DP问题分成11大类,本文将这些题目的解法进行探讨。所有题目均来自leetcode。 题目 1、线性 DP 最经典单串: 最长上升子序列 最经典双串: 最长公共子序列 经典问题: 三角形最小路径和 最大子序和 乘积最大子数组 鸡蛋掉落(DP+二分) 俄罗斯套娃信封问题 打家劫舍系列: (打家劫舍3 是树形DP) 打家劫舍 打家劫舍 II 股票系列: 买卖股票的最佳时机 买卖股票的最佳时机 II 买卖股票的最佳时机 III 买卖股票的最佳时机 IV

pl0321的博客 13万+

用一组可复现实验讲清 ABAP 内表 Standard / Sorted / Hashed 的性能差异

摘要(150字): SAP项目中性能问题常源于ABAP内表选型不当。标准表(STANDARD TABLE)写入快但查找慢(线性扫描),适合遍历场景;排序表(SORTED TABLE)保持有序,支持二分查找,适合范围查询;哈希表(HASHED TABLE)基于唯一键实现常数级查找,适合高频精确匹配。实验表明:标准表+BINARY SEARCH需预排序,成本可能高于直接使用排序表;哈希表在键匹配时性能最优。Gateway和RAP场景中,内表选型直接影响接口响应,建议根据读写负载(追加/遍历/精确查找)选择对应类

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 201

动态规划算法(DP)

    校招笔试面试前,大家一般都会先去牛客网上刷刷题,《剑指offer》,《leetcode》走起来,然后初次入手,发现很多不会,不会到什么程度呢,连个想法都没有,于是就去讨论区看答案,然后java大神,c++大神会给出花式解答,他们喜欢在答案前加一句,简单的dp算法,递归就可以解决,巴拉巴拉。说的还是很详细的,然而代码并不能看懂,毕竟    人生苦短,我用python下面就先给大家举一些详细的...

那什 5万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

★动态规划(DP算法)详解

动态规划(DP算法)详解

qq_17807067的博客 3万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【DP专辑】ACM动态规划总结

动态规划一直是ACM竞赛中的重点

cc_again的专栏 2万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

动态规划 dp算法

此处以求最小值为例✅ 状态定义:dp[i][j] = 将区间 [i,j] 合并成一段的最小代价✅ 转移方程:对于每个断点k,尝试将区间[i,j]分割成[i,k],[k+1,j]两端进行合并,则dp[i][j] = 区间[i,j]经过某种构造操作后的最大值(最小值)✅ 状态定义:dp[i][j] 表示将区间 [i,j] 转化为合法结构(如合法括号、回文)的最小代价(如删除次数)✅ 转移方程:情况1 s[i]==s[j] dp[i][j]=dp[i+1][j-1]情况2 s[i]!

scsdvsvf的博客 1200

算法竞赛备赛——【动态规划DP】线性DP

DP(动态规划)全称Dynamic Programming,是运筹学的一个分支,是一种将复杂问题分解成很多重叠的子问题,并通过子题的解得到整个问题的解的算法。基本步骤确定状态,一般为“到第i个为止, x为i (x为k) 的方案数/最小代价/最大价值”,可以根据数据范围和复杂度来推理确定状态转移方程,即从已知状态导到新状态的方法,并确保按照这个方向一定可以正确地得到最终状态。根据状态转移的方向来决定使用迭代法还是递归法 (记忆化)确定最终状态并输出。

2302_79975436的博客 2612

AcWing算法学习笔记:动态规划(背包 + 线性dp + 区间dp + 计数dp + 状态压缩dp + 树形dp + 记忆化搜索)

若体积从小到大进行遍历,当更新f[i, j]时,f[i - 1, j - vi] 已经在更新f[i, j - vi]时被更新了。因此体积需要从大到小进行遍历,当更新f[i, j]时,f[i - 1, j - vi] 还未被更新。并枚举每一个数字,若以该数字结尾的序列,其倒数第二个数字应该是小于该数字的最大的数。更新状态时,记录每一位子串是由哪一位结尾的子串转移而来的。将f[i]与f[i - 1]轮流交替使用数组进行存储。枚举每一个分组内的物品,进行01背包的选法策略。由于不存在01背包中的更新覆盖的情况。

一只可爱的小猴子的博客 1659

c++ 算法之动态规划—— dp 详解

dp 是 c++ 之中一个简单而重要的算法,每一个 OIer 必备的基础算法,你知道它究竟是什么吗?

zhhg0123的博客 2979

算法模板——动态规划(未完待更)

动态规划1 背包问题九讲1.1 0-1背包、满包1.2 完全背包1.3 多重背包1.4 混合背包1.5 二维费用背包3.6 分组背包1.6 有依赖的背包问题1.7 泛化物品1.8 背包问题问法的变化1.9 Reference 1 背包问题九讲 1.1 0-1背包、满包 有N件物品和一个容量为V 的背包。放入第i件物品耗费的空间是Ci,得到的价值是Wi。求解将哪些物品装入背包可使价值总和最大。 ...

Aries_young的博客 703

【算法模板】动态规划(基础DP篇)

将过去和羁绊全部丢弃,不好吝惜那为梦想留下的泪水。 ——路飞

小宝的博客 3085

dp算法入门(闫氏dp分析法)

dp即是动态规划,是一种把问题分成若干个有关联的子问题来求解复杂问题的方法。dp常常适用于有重叠的子问题和最有子结构性质的问题(★ dynamic programming is a method for solving a complex problem by breaking it down into a collection of simpler subproblems.)简单来说,dp就是将复杂问题分成小问题然后表示每种问题的‘状态’并加以计算。

m0_72400354的博客 4551

【算法】动态规划专题⑫ —— 环形区间DP python

环形区间动态规划(Circular Interval Dynamic Programming)是传统区间DP的一种扩展,它处理的问题场景中输入数据或问题结构呈现环状。 这意味着第一个元素和最后一个元素是相邻的,形成一个闭合的圈。这种特性使得一些原本适用于线性序列上的区间DP技术需要进行适当的调整才能应用到环形结构上。

查理零世的博客 1698

【算法】一文带你从浅至深入门dp动态规划

还在为解不出dp动态规划的题目而苦恼吗?本文将带你从浅至深入门dp动态规划

做技术人 · 产优质博客 · 找好工作 1656
上一篇: 一些常用的网站
下一篇: AtCoder | ARC064 | 题解
Averyta
博客等级 码龄7年 1粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值