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];
    }
};
相关推荐
算法鑫探6 小时前
闰年判断:C语言实战解析
c语言·数据结构·算法·新人首发
WBluuue6 小时前
数据结构与算法:康托展开、约瑟夫环、完美洗牌
c++·算法
木子墨5166 小时前
LeetCode 热题 100 精讲 | 并查集篇:最长连续序列 · 岛屿数量 · 省份数量 · 冗余连接 · 等式方程的可满足性
数据结构·c++·算法·leetcode
2501_921960857 小时前
双相自指图与弦论边界非对易性的结构同源
数据结构
王老师青少年编程7 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:均分纸牌
c++·算法·编程·贪心·csp·信奥赛·均分纸牌
EQUINOX17 小时前
2026年码蹄杯 本科院校赛道&青少年挑战赛道提高组初赛(省赛)第一场,个人题解
算法
萝卜小白7 小时前
算法实习Day04-MinerU2.5-pro
人工智能·算法·机器学习
Liangwei Lin8 小时前
洛谷 P3133 [USACO16JAN] Radio Contact G
数据结构·算法
weixin_513449968 小时前
PCA、SVD 、 ICP 、kd-tree算法的简单整理总结
c++·人工智能·学习·算法·机器人
code_pgf8 小时前
Qwen2.5-VL 算法解析
人工智能·深度学习·算法·transformer