# 股票问题 ## [122. 买卖股票的最佳时机 II](https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/) - `dp[i][0]` 表示第 i 天持有股票情况下的资产总额,`dp[i][1]` 表示第 i 天没有持有股票情况下的资产总额。这里的资产不包括股票本身的价值,只包括自身的现金,如果你在第 1 天买入了股票,那么你的资产总额是 `-prices[0]`。 - 递推公式: - 我们先来讨论 `dp[i][0]`,也就是第 i 天持有股票时的资产,分两种情况 - 第 i - 1 天持有股票,那么第 i 天的资产就是 `dp[i - 1][0]` - 第 i - 1 天没持有股票,那么第 i 天的资产就是 `dp[i - 1][1] - prices[i]` - 取这两者的最大值即为第 i 天的最大资产 `dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i])` - 同理 `dp[i][1]` 也分两种情况 - 第 i - 1 天持有股票,那么第 i 天的资产就是 `dp[i - 1][0] + prices[0]` - 第 i - 1 天没持有股票,那么第 i 天的资产就是 `dp[i - 1][1]` - 取这两者的最大值即为第 i 天的最大资产 `dp[i][1] = max(dp[i - 1][0] + prices[i], dp[i - 1][1])` - 初始化 - `dp[0][0] = -prices[0]` - `dp[0][1] = 0` - 遍历顺序:从前往后 ## [123.买卖股票的最佳时机III](https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/) - `dp[i][j][k]` 是第 `i` 笔交易中,第 `j` 天,是否持有股票时的总资产 - 递推公式: - `dp[0][i][0] = max(dp[0][i - 1][0], -prices[i])` - `dp[0][i][1] = max(dp[0][i - 1][1], dp[0][i][0] + prices[i])` - `dp[1][i][0] = max(dp[1][i - 1][0], dp[0][i - 1][1] - prices[i])` - `dp[1][i][1] = max(dp[1][i - 1][1], dp[0][i - 1][0] + prices[i])` - 初始化: - `dp[i][0][0] = -prices[0]` - `dp[i][0][1] = 0` - 遍历顺序: - 先遍历 `i` - 再遍历 `j` 和 `k`