动态规划——买卖股票的最佳时机含冷冻期

简介: 动态规划——买卖股票的最佳时机含冷冻期

1、题目链接


leetcode 309. 买卖股票的最佳时机含冷冻期



2、题目分析


该题有我们可以定义三种状态,买入状态,可交易状态 ,冷冻期状态

我们可以建立一个n*3的二维数组来表示这三种状态:




根据这个图可以看出,

可以从买入状态卖出变成可交易状态,或者从买入状态还是到买入状态(什么也不干),

可以从可交易状态到买入状态,或者从可交易状态到可交易状态(什么也不干)

可以从冷冻期状态到可交易状态(只有这一种情况)

根据以上信息,可以列出状态转移方程:

dp[i][0]表示在第i天,处于买入状态时所获得的最大利润

dp[i][1]表示在第i天,处于可交易状态时所获得的最大利润

dp[i][2]表示在第i天,处于冷冻期状态时所获得的最大利润


那么:

dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]);

dp[i][1]=max(dp[i-1][1],dp[i-1][2]);

dp[i][2]=dp[i-1][0]+prices[i];

3、代码解析

int maxProfit(vector<int>& prices) {
        int n=prices.size();
        vector<vector<int>>dp(n,vector<int>(3));
        //dp[i][0]表示在第i天,处于买入状态时所获得的最大利润
        //dp[i][1]表示在第i天,处于可交易状态时所获得的最大利润
        //dp[i][2]表示在第i天,处于冷冻期状态时所获得的最大利润
 
        //初始化
        dp[0][0]=-prices[0];
        dp[0][1]=0;
        dp[0][2]=0;
        for(int i=1;i<n;i++)
        {
            dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]);
            dp[i][1]=max(dp[i-1][1],dp[i-1][2]);
            dp[i][2]=dp[i-1][0]+prices[i];
        }
        return max(dp[n-1][1],dp[n-1][2]);
    }


相关文章
|
7月前
【动态规划】买卖股票问题
【动态规划】买卖股票问题
96 0
|
7月前
|
算法 C++ Python
leetcode-122:买卖股票的最佳时机 II (贪心算法)
leetcode-122:买卖股票的最佳时机 II (贪心算法)
55 1
|
算法
【动态规划刷题 7】 买卖股票的最佳时机含冷冻期&& 买卖股票的最佳时机含手续费
【动态规划刷题 7】 买卖股票的最佳时机含冷冻期&& 买卖股票的最佳时机含手续费
|
算法
【动态规划刷题 8】买卖股票的最佳时机 III && 买卖股票的最佳时机 IV
【动态规划刷题 8】买卖股票的最佳时机 III && 买卖股票的最佳时机 IV
|
7月前
|
算法
算法编程(五):买卖股票的最佳时机
算法编程(五):买卖股票的最佳时机
53 0
|
6月前
|
算法
leetcode题解:121.买卖股票的最佳时机
leetcode题解:121.买卖股票的最佳时机
44 0
|
7月前
|
算法
【力扣】121. 买卖股票的最佳时机、122.买卖股票的最佳时机Ⅱ
【力扣】121. 买卖股票的最佳时机、122.买卖股票的最佳时机Ⅱ
|
7月前
代码随想录 Day43 动态规划11 LeetCode T309 买卖股票的最佳时期含冷冻期 T714买卖股票的最佳时机含手续费
代码随想录 Day43 动态规划11 LeetCode T309 买卖股票的最佳时期含冷冻期 T714买卖股票的最佳时机含手续费
54 0
|
7月前
代码随想录 Day41 动态规划09 LeetCode T121 买卖股票的最佳时机 T122 买卖股票的最佳时机II
代码随想录 Day41 动态规划09 LeetCode T121 买卖股票的最佳时机 T122 买卖股票的最佳时机II
48 0
|
算法
代码随想录算法训练营第五十天 | LeetCode 309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费、股票系列总结
代码随想录算法训练营第五十天 | LeetCode 309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费、股票系列总结
80 1