youngyangyang04 / leetcode-master-comment

用来做评论区
0 stars 0 forks source link

[Vssue]动态规划-股票问题总结篇.md #147

Open youngyangyang04 opened 3 weeks ago

youngyangyang04 commented 3 weeks ago

https://www.programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92-%E8%82%A1%E7%A5%A8%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93%E7%AF%87.html

Du1in9 commented 1 week ago

👉 买卖股票的最佳时机:股票只能买卖一次,问最大收益。

dp[i][0] = Math.max(dp[i - 1][0], 0 - prices[i]);
dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] + prices[i]);

👉 买卖股票的最佳时机 Ⅱ:股票可以买卖多次,问最大收益。

dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] - prices[i]);
dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] + prices[i]);

👉 买卖股票的最佳时机 Ⅲ:股票最多买卖两次,问最大收益。

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]);

👉 买卖股票的最佳时机 Ⅳ:股票最多买卖 k 次,问最大收益。

for (int j = 1; j < 2 * k + 1; j += 2) {
    dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1] - prices[i]);
    dp[i][j + 1] = Math.max(dp[i - 1][j + 1], dp[i][j] + prices[i]);
}

👉 买卖股票的最佳时机含冷冻期:股票买卖有冷冻期,问最大收益。

dp[i][0] = Math.max(dp[i - 1][0], Math.max(dp[i - 1][3] - prices[i], dp[i - 1][1] - prices[i]));
dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][3]);
dp[i][2] = dp[i - 1][0] + prices[i];
dp[i][3] = dp[i - 1][2];

👉 买卖股票的最佳时机含手续费:股票买卖有手续费,问最大收益。

dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] - prices[i]);
dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);