动态规划 Leetcode 188 买卖股票的最佳时机IV

买卖股票的最佳时机IV

Leetcode 188

学习记录自代码随想录

要点:1.类似于Leetcode 121这道题,只不过多了几轮,循坏递推就可以

cpp 复制代码
class Solution {
public:
    int maxProfit(int k, vector<int>& prices) {

        int n = prices.size();
       // 1.dp[i][2*k]
       vector<vector<int>> dp(n, vector<int>(2*k, 0));
       // 2.递推公式:dp[i][0] = max(dp[i-1][0], -prices[i])
       //            dp[i][1] = max(dp[i-1][1], dp[i-1][0]+prices[i])
       //            dp[i][2] = max(dp[i-1][2], dp[i-1][1]-prices[i])
       //            dp[i][3] = max(dp[i-1][3], dp[i-1][2]+prices[i])
       //            ............
       // 3.初始化:dp[0][0], dp[0][2], dp[0][4]............为-prices[0],其余为0
       for(int i = 0; i < k; i++){
           dp[0][2*i] = -prices[0];
       }
       // 4.正向遍历
       for(int i = 1; i < n; i++){
            dp[i][0] = max(dp[i-1][0], -prices[i]);
            dp[i][1] = max(dp[i-1][1], dp[i-1][0]+prices[i]);
            for(int j = 1; j < k; j++){
                dp[i][2*j] = max(dp[i-1][2*j], dp[i-1][2*j-1]-prices[i]);
                dp[i][2*j+1] = max(dp[i-1][2*j+1], dp[i-1][2*j]+prices[i]);
            }
       }
       // 5.举例推导递推公式
       return dp[n-1][2*k-1];
    }
};
相关推荐
MediaTea1 小时前
AI 术语通俗词典:C4.5 算法
人工智能·算法
Navigator_Z1 小时前
LeetCode //C - 1033. Moving Stones Until Consecutive
c语言·算法·leetcode
WBluuue1 小时前
数据结构与算法:莫队(一):普通莫队与带修莫队
c++·算法
风筝在晴天搁浅2 小时前
n个六面的骰子,扔一次之后和为k的概率是多少?
算法
MATLAB代码顾问3 小时前
Python实现蜂群算法优化TSP问题
开发语言·python·算法
代码飞天3 小时前
机器学习算法和函数整理——助力快速查阅
人工智能·算法·机器学习
jiushiapwojdap3 小时前
LU分解法求解线性方程组Matlab实现
数据结构·其他·算法·matlab
笨笨饿4 小时前
69_如何给自己手搓一个串口
linux·c语言·网络·单片机·嵌入式硬件·算法·个人开发
纽扣6674 小时前
【算法进阶之路】链表进阶:删除、合并、回文与排序全解析
数据结构·算法·链表
消失的旧时光-19435 小时前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法