leetcode 3573(买卖股票问题,状态机dp)

3573: 买卖股票的最佳时机Ⅴ

思路:状态机(买卖股票问题)

  • dfs(i,j,0) 表示在 prices[0] 到 prices[i] 中完成至多 j 笔交易,第 i 天结束时未持有股票的最大利润。
  • dfs(i,j,1) 表示在 prices[0] 到 prices[i] 中完成至多 j 笔交易,第 i 天结束时持有股票的最大利润。dfs(i,j,2) 表示在 prices[0] 到 prices[i] 中完成至多 j 笔交易,第 i 天结束时处于做空中(空头状态)的最大利润。

此外,对于 dfs(i,j,0),在计算最大值时额外考虑在第 i 天买回股票(平空)的情况,即 dfs(i,j,2)−prices[i]。

复制代码
vector<array<long long,3>> f(k+2,{LLONG_MIN/2,LLONG_MIN/2,LLONG_MIN/2});

下标 0~k+1(三个状态 - 二维数组)

复制代码
class Solution {
public:
    long long maximumProfit(vector<int>& prices, int k) {
        int n=prices.size();
        vector<array<long long,3>> f(k+2,{LLONG_MIN/2,LLONG_MIN/2,LLONG_MIN/2});
        for(int j=1;j<=k+1;j++) f[j][0]=0; //保证f[j-1]不越界,j从1开始
        for(int p:prices){
            for(int j=k+1;j>0;j--){
                f[j][0]=max(f[j][0],max(f[j][1]+p,f[j][2]-p));
                f[j][1]=max(f[j][1],f[j-1][0]-p);
                f[j][2]=max(f[j][2],f[j-1][0]+p);
            }
        }

        return f[k+1][0];
    }
};
相关推荐
天天爱吃肉82181 小时前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
alphaTao1 小时前
LeetCode 每日一题 2026/2/2-2026/2/8
算法·leetcode
甄心爱学习1 小时前
【leetcode】判断平衡二叉树
python·算法·leetcode
颜酱1 小时前
从二叉树到衍生结构:5种高频树结构原理+解析
javascript·后端·算法
不知名XL2 小时前
day50 单调栈
数据结构·算法·leetcode
@––––––2 小时前
力扣hot100—系列2-多维动态规划
算法·leetcode·动态规划
xsyaaaan2 小时前
代码随想录Day31动态规划:1049最后一块石头的重量II_494目标和_474一和零
算法·动态规划
Jay Kay3 小时前
GVPO:Group Variance Policy Optimization
人工智能·算法·机器学习
Epiphany.5563 小时前
蓝桥杯备赛题目-----爆破
算法·职场和发展·蓝桥杯
YuTaoShao3 小时前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法三)DP 空间优化
算法·leetcode·职场和发展