leetcode刷题笔记——状态机DP/股票系列

我们通过记住一些事情来节省时间,这就是动态规划的精髓。

表示状态之间转换关系的图叫状态机

无后效性从字面上意思可以理解为:一旦一个阶段的结果计算出来,后面阶段的求解过程不会影响前面阶段的计算结果。动态规划,通过递推求解问题的过程可以看成一张有向无环图。

  • 有向:多阶段递推求解;
  • 无环:即无后效性。

「无后效性」是设计「动态规划」问题非常重要的指导思想,为了使得求解的过程满足「无后效性」,通常的做法是在设计状态的时候在后面多加一维。

「无后效性」这个概念相对比较晦涩,需要通过一定的练习才能充分理解,这里推荐「力扣」第 53 题、第 300 题、第 5 题、第 337 题、第 1143 题、第 152 题、第 72 题这几个极其典型的问题。欢迎交流。

股票问题通用模板:

符号:

T[i][k]:第i天结束时,最多进行k次交易的情况下可以获得的最大收益
T[i][k][0]:第i天结束时,最多进行k次交易且进行操作后持有0份股的情况下可以获得的最大收益
T[i][k][1]:第i天结束时,最多进行k次交易且进行操作后持有1份股的情况下可以获得的最大收益

⭐初始化:

T[-1][k][0]=0,T[-1][k][1]=-∞
T[i][0][0]=0,T[i][0][1]=-∞

状态转移方程:

T[i][k][0]=max(T[i-1][k][0], T[i-1][k][1]+prices[i])
T[i][k][1]=max(T[i-1][k][1], T[i-1][k-1][0]-prices[i])

二维dp数组的初始化:

    vector<vector<int>> dp(size,vector<int>(2,0));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值