Leetcode - 动态规划总结(必看!!!)
一、labuladong动态规划模板思路
wiki:https://labuladong.gitee.io/algo/di-ling-zh-bfe1b/dong-tai-g-1e688/
题目:
动态规划模板思路:
二、我自己如何理解【状态】【选择】
以714题目《最佳时机去买卖股票+手续费》为例子:
1.确定 【状态】 -- 寻找原问题和子问题中,变化的“结果”变量(而不是一个选择/动作)
原问题:第N天,股票账户的最大利润
子问题:第N-1天,股票账户的最大利润
其中,变化的变量有【天数】,以及从子问题到原问题的【是否持有股票状态】的变化
请注意:为何状态是【是否持有股票状态】,而不是【买】【卖】【休息】?
因为买、卖、休息,都是动作(可以理解为二叉树的树枝,是变化的路径)。
动作做完后的静态状态【是否持有股票状态】,才是变化后的结果(可以理解为二叉树的节点,是变化的结果)
2.确定【选择】-- 就是每一个子问题能操作的动作(有哪些导致状态变化的行为)
显而易见,就是三个动作:
- 买
- 卖
- 休息(不操作)
3.明确dp数组的定义 -- 每个状态都需要呈现一个维度,若有两个状态就需要二维数组
本题中,需要的是:
最后一【天】的【未持有股票状态(因为不操作肯定买要利润大)】的 {最大利润}
- 【】中的就是状态
- {} 中的是dp数组内的值,也是该问题需要的解
分类:
Leetcode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-07-12 MySQL - 获取当前时间/秒级/毫秒级时间戳
2022-07-12 MySQL - insert into V.S. replace into
2020-07-12 计算机术语 - JIT