动态规划算法-简单多状态dp问题:18.买卖股票的最佳时机Ⅳ

题目链接:188. 买卖股票的最佳时机 IV(困难)

算法原理:

解法:动态规划

跟上题 动态规划算法-简单多状态dp问题:17.买卖股票的最佳时机Ⅲ一样

Java代码:

java 复制代码
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 王洋
 * Date: 2025-10-20
 * Time: 20:27
 */
class Solution {
    //188.买卖股票的最佳时机Ⅳ
    //听了吴小哲说的,上一题做完直接写着题,发现果然一遍过,代码一模一样
    public int maxProfit(int k, int[] prices) {
        int n=prices.length;
        k=Math.min(k,n/2);//这题不同于上题,有个优化:缩小k的规模
        int[][] f=new int[n][k+1];
        int[][] g=new int[n][k+1];
        int INF=-0x3f3f3f3f;
        for(int i=0;i<=k;i++) f[0][i]=g[0][i]=INF;
        f[0][0]=-prices[0];g[0][0]=0;
        for(int i=1;i<n;i++){
            for(int j=0;j<=k;j++){
                f[i][j]=Math.max(f[i-1][j],g[i-1][j]-prices[i]);
                g[i][j]=g[i-1][j];
                if(j-1>=0) g[i][j]=Math.max(g[i][j],f[i-1][j-1]+prices[i]);
            }
        }
        int max=Integer.MIN_VALUE;
        for(int i=0;i<=k;i++) max=Math.max(max,g[n-1][i]);
        return max;
    }
}
相关推荐
Pluchon26 分钟前
硅基计划4.0 算法 记忆化搜索
java·数据结构·算法·leetcode·决策树·深度优先
Less is moree29 分钟前
2.C语言文件操作(一):fgetc(),fgets(),fread的区别
c语言·开发语言·算法
CoderYanger30 分钟前
动态规划算法-简单多状态dp问题:13.删除并获得点数
java·开发语言·数据结构·算法·leetcode·动态规划·1024程序员节
浅川.2531 分钟前
xtuoj Balls
数据结构·算法
分布式存储与RustFS32 分钟前
云原生基石:实战RustFS on Kubernetes,构建高可用存储架构
算法·云原生·kubernetes·对象存储·高可用·企业存储·rustfs
ohnoooo934 分钟前
C++ STL库常用容器函数
java·开发语言
顾人间讥诘36 分钟前
卡特兰数及相关应用场景
算法
天骄t36 分钟前
深入解析栈:数据结构与系统栈
java·开发语言·数据结构
源代码•宸36 分钟前
GoLang并发示例代码1(关于逻辑处理器运行顺序)
开发语言·经验分享·后端·golang