基础
刷题
- 买卖股票的最佳时机 IV
动规五部曲:
- 确定dp数组定义
第i天第k次持有股票的最大金额 是 dp[i][2*k-1]
第i天第k次不持有股票的最大金额是 dp[i][2*k]
- 确定dp数组的递推公式
dp[i][2*k-1] = max(dp[i-1][2*k-1], dp[i-1][2*k-2] - prices[i])
dp[i][2*k] = max(dp[i-1][2*k], dp[i-1][2*k-1] - prices[i])
- 确定dp数组的初始化
dp[i][0] = 0 // 代表0次操作,就是不操作,不操作就没有盈亏
dp[0][奇数] = -prices[0]
dp[0][偶数] = 0
// 当第一天进行第二次买入操作的时候,可以理解为没有执行第一次买卖操作
- 确定dp数组遍历顺序
从左向右,从上到下
- 打印dp数组
- 买卖股票的最佳时机含冷冻期
这道题讲解的很难,很多状态,但是用之前的思路,使用两个状态,一个是持有股票,一个是不持有股票的状态
dp[i][0] 第i天持有股票的状态
dp[i][-1] 第i天不持有股票的状态
dp[i][0] = max(dp[i-1][0], dp[i-2][1] - prices[i])
dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i])
- 买卖股票的最佳时机含手续费
和之前一样的,就是在买股票的时候扣除手续费
总结
个人总结:
- dp数组是记录遍历过程中的状态,可以先想一下如何构造递推公式,需要用到或者记录哪些变量,再去定义dp数组
- 在初始化dp数组的时候,遇到非法的0值 或者初始化的值,可以代入递推公式,找到需要的初始化数据