121. 买卖股票的最佳时机
dp[i][0] 代表第i天持有股票手上的金额
dp[i][1] 代表第i天不持有股票手上的金额
初始化:
dp[0][0] 持有所以是-prices[0]
dp[0][1] 不持有所以是0;
递推公式:
dp[i][0] 既然是i天时持有,那么就是之前就持有,或者今天才持有的最大值
dp[i][0] = max(dp[i-1][0],-prices[i]);
dp[i][1]是不持有 所以是之前就不持有或者是之前持有今天刚刚卖出
dp[i][1] = max(dp[i-1][1],dp[i-1][0]+prices[i]);
遍历顺序是从小到大
最后返回dp[len-1][1] 因为卖出手头上的钱肯定比买入要多
122. 买卖股票的最佳时机 II
跟上面一道题很类似,唯一的区别是再约持有的情况,因为是多次买入
dp[i][0] = max(dp[i-1][0],-prices[i]);这个就不对了 因为之前买卖会有收益
那么就会变成之前持有的时候的值减去这一次花掉的钱
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);
123. 买卖股票的最佳时机 III
首先会有五种状态
0.不操作;
1.第一次持有
2.第一次不持有
3.第二次持有
4.第二次不持有
在初始化时,由于都是在第一天进行 所以只有1 3情况为-price[0];
递推公式
return只要return第四种情况就可以了 因为这是包含第二种情况的 而卖出回比买入手中钱更多