当前位置: 首页 > news >正文

动态规划-状态机(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]);

 

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?

// 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);
    }
}


文章转载自:
http://capitatim.kjawz.cn
http://assiut.kjawz.cn
http://auramine.kjawz.cn
http://championship.kjawz.cn
http://aclu.kjawz.cn
http://aerenchyma.kjawz.cn
http://antiwar.kjawz.cn
http://adenosis.kjawz.cn
http://carved.kjawz.cn
http://bicommunal.kjawz.cn
http://aboriginality.kjawz.cn
http://bract.kjawz.cn
http://bodley.kjawz.cn
http://acquaintanceship.kjawz.cn
http://besom.kjawz.cn
http://aboveground.kjawz.cn
http://babelism.kjawz.cn
http://abampere.kjawz.cn
http://bunco.kjawz.cn
http://carmaker.kjawz.cn
http://alike.kjawz.cn
http://autoreflection.kjawz.cn
http://accountancy.kjawz.cn
http://bribery.kjawz.cn
http://abbevillian.kjawz.cn
http://chilean.kjawz.cn
http://brs.kjawz.cn
http://bowline.kjawz.cn
http://almsdeed.kjawz.cn
http://annexe.kjawz.cn
http://www.dtcms.com/a/1982.html

相关文章:

  • 银行业务队列简单模拟(队列应用)
  • 【单片机】11-步进电机和直流电机
  • 探索ClickHouse——连接Kafka和Clickhouse
  • idea清空缓存类
  • springboot之@ImportResource:导入Spring配置文件~
  • 【数据开发】DW数仓分层设计架构与同步策略(ODS、DWD、DWS等字段含义)
  • 基于微信小程序的明星应援小程序设计与实现(源码+lw+部署文档+讲解等)
  • SQL_ERROR_INFO: “Duplicate entry ‘9003‘ for key ‘examination_info.exam_id‘“
  • 【前端】HTML5 Audio 预加载 按照队列顺序播放音频, 可以陆续往队列中加内容
  • OpenNebula的配置与应用(二)
  • VisualStudio配置OpenCV环境
  • 升级targetSdkVersion至33(以及迁移至Androidx)
  • 案例突破——再探策略模式
  • 【AI视野·今日Robot 机器人论文速览 第四十五期】Mon, 2 Oct 2023
  • tcp滑动窗口原理
  • 【已解决】opencv 交叉编译 ffmpeg选项始终为NO
  • 【测试人生】游戏业务测试落地精准测试专项的一些思路
  • TouchEffects - Android View点击特效
  • 定义现代化实时数据仓库,SelectDB 全新产品形态全面发布
  • Python爬虫解决中文乱码
  • css自学框架之选项卡
  • JS中的强制类型转换
  • 在 msys2/mingw 下安装及编译 opencv
  • vue 2 与 vue3 获取模版引用 (ref)的区别
  • STM32之DMA
  • 2310d模板替换运行时
  • C/C++笔试面试真题
  • 理解CSS的层叠性和继承性
  • 力扣第347题 堆(优先队列) 经典题 c++ 简易注释版 附(相关知识点解答)
  • pandas