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> dp(size,vector(2,0));

你可能感兴趣的:(leetcode,笔记,算法)