动态规划(基于代码随想录)的随笔
动态规划
状态转移公式(递推公式)是很重要,但动规不仅仅只有递推公式。
对于动态规划问题,我将拆解为如下五步曲,这五步都搞清楚了,才能说把动态规划真的掌握了!
方法论
- 确定dp数组(dp table)以及下标的含义
- 确定递推公式
- dp数组如何初始化
- 确定遍历顺序
- 打印推导dp数组
背包问题
- 01背包
物品只能使用一次
在二维的情况下:先背包还是先物品都可以
在一维的情况下:先物品后背包,背包遍历从大到小,(避免前面物品用到多次) - 完全背包:物品可以使用无数次
求组合:先物品再背包
求排列:先背包再物品
股票问题
持有现金/ 不持有现金 就是买与不买
子序列问题
- 子序列(不连续)
最长递增子序列:dp[i]表示以i结尾的 最长的递增子序列
最长公共子序列:dp[i][j]表示,str1 以i结尾的 与str2 以j结尾的 最长公共子序列 - 子序列(连续)
最长连续递增子序列:连续 dp[i] = dp[i-1] + 1
最长重复子数组:dp[i][j]表示,str1 以i结尾的 与str2 以j结尾的 - 编辑距离
不同的子序列:dp[i][j]表示,以i结尾的s子序列 出现在以j结尾的t子序列的个数
两个字符串的删除操作:dp[i][j]表示,word1 以i结尾的 与word2 以j结尾的 要相等需要删除的最少次数
编辑距离:与上题相同,多一个替换操作 - 回文
回文子串:遍历顺序(从下到上,从左到右)
最长回文子序列:dp[i][j]表示:字符串s 在 i到j 范围最长的回文子序列的长度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探