188. 买卖股票的最佳时机 IV

Problem: 188. 买卖股票的最佳时机 IV

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
int maxProfit(int k, vector<int>& prices) {
//本题与123. 买卖股票的最佳时机 III 唯一的区别是本题可以k次买入
//通过123. 买卖股票的最佳时机 III我们已经可以发现一个规律了
//每次买入所得现金=max(之前买入所得现金,卖出上一次所得现金-当钱股价)
vector<vector<int>> dp(prices.size(), vector<int>(2*k+1, 0));
// 初始化 dp[0][1] -= prices[0];dp[0][3] -= prices[0];
for(int j=1;j<2*k;j+=2) dp[0][j] = -prices[0];
for (int i = 1; i < prices.size(); i++) {
// 第j次买入 dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] - prices[i]);
// 第j次卖出: 第j次持有+当前股价 dp[i][2] = max(dp[i - 1][2], dp[i - 1][1] + prices[i]);
for(int j=1;j<2*k;j+=2) {
dp[i][j] = max(dp[i - 1][j ], dp[i - 1][j-1] - prices[i]);
dp[i][j+1] = max(dp[i - 1][j+ 1], dp[i - 1][j] + prices[i]);
}
}
return dp[prices.size()-1][2*k];
}
};