123. 买卖股票的最佳时机 III
题目链接:123. 买卖股票的最佳时机 III
dp含义:
dp[i][0]持有股票的最大利润,dp[i][1]不持股最大金额
-
递推公式:
- for(int i = 1; i < len; i++) {
dp[i][0] = dp[i-1][0];
dp[i][1] = Math.max(dp[i-1][1], dp[i-1][0] - prices[i]);
dp[i][2] = Math.max(dp[i-1][2], dp[i-1][1] + prices[i]);
dp[i][3] = Math.max(dp[i-1][3], dp[i-1][2] - prices[i]);
dp[i][4] = Math.max(dp[i-1][4], dp[i-1][3] + prices[i]);
}
- for(int i = 1; i < len; i++) {
-
初始化
- // dp[0][0] = 0; //不操作
// dp[0][1] = -prices[0]; //第一次持有
// dp[0][2] = 0; //第一次不持有
// dp[0][3] = -prices[0];
// dp[0][4] = 0;
- // dp[0][0] = 0; //不操作
188. 买卖股票的最佳时机 IV
题目链接:188. 买卖股票的最佳时机 IV
-
递推公式:
- for(int i = 1; i < len; i++) {
for(int j = 0; j < k * 2 + 1; j++){
if(j == 0) dp[i][j] = dp[i-1][j];
else if (j % 2 == 1){
dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-1] - prices[i]);
} else {
dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-1] + prices[i]);
}
}
}
- for(int i = 1; i < len; i++) {
-
初始化:
- for(int i = 0; i < 2*k+1; i++){
if(i % 2 == 0) dp[0][i] = 0;
else dp[0][i] = -prices[0];
}
- for(int i = 0; i < 2*k+1; i++){