动态规划-状态机(188. 买卖股票的最佳时机 IV)

这篇具有很好参考价值的文章主要介绍了动态规划-状态机(188. 买卖股票的最佳时机 IV)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

状态分类:

f[i,j,0]考虑前i只股票,进行了j笔交易,目前未持有股票 所能获得最大利润

f[i,j,1]考虑前i只股票,进行了j笔交易,目前持有股票 所能获得最大利润

状态转移:

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

f[i][j][1] = Math.max(f[i-1][j][1],f[i-1][j-1][0]-prices[i]);

 动态规划-状态机(188. 买卖股票的最佳时机 IV),算法笔记,动态规划,算法

class Solution {
    static int INF = 0x3f3f3f3f;
    public int maxProfit(int k, int[] prices) {
        int n = prices.length;
        int f[][][] = new int[n+1][k+1][2];
        for(int i = 0;i <= n;i++){
            for(int j = 0;j <= k;j++){
                Arrays.fill(f[i][j],-INF);
            }
            
        }
        for(int i = 0;i <= n;i++)f[i][0][0] = 0;

        for(int i = 1;i <= n;i++){
            for(int j = 1;j <= k;j++){
                f[i][j][0] = Math.max(f[i-1][j][0],f[i-1][j][1]+prices[i-1]);
                f[i][j][1] = Math.max(f[i-1][j][1],f[i-1][j-1][0]-prices[i-1]);
            }
        }
        int ans = 0;
        for(int i = 0;i <= k;i++){
            ans = Math.max(ans,f[n][i][0]);
        }
        return ans;
    }
}

还有一位大佬的看不懂的极妙解法--滚动的dp?文章来源地址https://www.toymoban.com/news/detail-719156.html

// java
class Solution {
    public int maxProfit(int k, int[] prices) {
        int[] buy = new int[k], sell = new int[k];
        Arrays.fill(buy, -prices[0]);
        for (int i = 1; i < prices.length; i++) {
            for (int j = 0, pre = 0; j < k; j++) {
                buy[j] = (pre = Math.max(buy[j], pre - prices[i]));
                sell[j] = (pre = Math.max(sell[j], pre + prices[i]));
            }
        }
        return Math.max(sell[k - 1], 0);
    }
}

到了这里,关于动态规划-状态机(188. 买卖股票的最佳时机 IV)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • day 43 | ● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

    ● 188.买卖股票的最佳时机IV 和买卖股票3中的思路一样,只不过从两次换成了k次

    2024年02月10日
    浏览(36)
  • 力扣 188. 买卖股票的最佳时机 IV

    题目来源:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/description/ C++题解:动态规划 思路同力扣 123. 买卖股票的最佳时机 III-CSDN博客,只是把最高2次换成k次。如果思路不清晰,可以将k从0写到4等找找规律。

    2024年02月20日
    浏览(37)
  • leetcode-188-买卖股票的最佳时机 IV

    https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/description/

    2024年02月10日
    浏览(38)
  • leetcode 188. 买卖股票的最佳时机 IV

            这道题是 买卖股票的最佳时机III  的升级版,即买卖次数限制为k次,做法和上一篇如法炮制,直接看代码:

    2024年02月12日
    浏览(36)
  • 【学会动态规划】买卖股票的最佳时机 IV(18)

    目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 学习一个算法没有捷径,更何况是学习动态规划, 跟我一起刷动态规划算法题,一起学会动态规划! 题目链接:188. 买卖股票的最佳时机 IV

    2024年02月13日
    浏览(39)
  • 【算法】力扣【动态规划、状态机】309. 买卖股票的最佳时机含冷冻期

    309. 买卖股票的最佳时机含冷冻期 本文介绍解决力扣平台上第309号问题——“买卖股票的最佳时机含冷冻期”的算法。这是一个中等难度的问题,其核心是通过设计一个算法来计算在给定的股票价格数组 prices 下,能够获取的最大利润。股票价格数组 prices 中的每个元素 pric

    2024年01月18日
    浏览(46)
  • 算法[动态规划]---买卖股票最佳时机

    1、题目: 给你一个整数数组 prices,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持一股股票。你也可以先购买,然后在同一天出售。 返回你能获得的最大利润 。 2、 分析特点: 题目要求:在任何时候最多

    2024年02月09日
    浏览(41)
  • 刷题第四十二天 123. 买卖股票的最佳时机Ⅲ 188. 买卖股票的最佳时机Ⅳ

    和前一题的限制在于只能买卖两次,所以dp数组多定义一个状态,分别表示第一次持有 第一次不持有和第二次持有 第二次不持有,然后进行更新。 注意初始化的时候 第一次持有和第二次持有都需要默认0-prices[0] 和前一题的差别就是可以多次买卖,所以定义一个三维数组,表

    2024年02月05日
    浏览(47)
  • 动态规划——买卖股票的最佳时机系列题

    买卖股票有一系列题目 以下是我找出它们之间的区别: 第一题,只能买一次,从最低价入手,最高价卖出 第二题,可以买无数次,但买了之后,必须卖出之后,再来重新买入,再卖出。 第三题,只能买两次,但买了之后,必须卖出之后,再来重新买入,再卖出。 第四题,

    2024年01月17日
    浏览(49)
  • LeetCode:121.买卖股票的最佳时机——动态规划

    🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 关于动态规划:LeetCode:322. 零钱兑换——动态规划从案例入门 题目描述 :给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只

    2023年04月17日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包