当前位置: 首页 > news >正文

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

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

题目链接:

309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode)icon-default.png?t=O83Ahttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/description/

 


2. 题目解析

 


 

3.  算法原理

状态表示:以某一个位置为结尾或者以某一个位置为起点

   

dp[i][0]表示:第i天结束之后,处于买入状态,此时的最大利润

  

dp[i][1]表示:第i天结束之后,处于可交易状态,此时的最大利润

   

dp[i][2]表示:第i天结束之后,处于冷冻期状态,此时的最大利润

  

2. 状态转移方程

在第i-1天处于买入状态,看买入状态能不能到自己,看可交易状态能不能到买入状态,看冷冻期状态能不能到买入状态,其他两个状态也是如此,一共9种状态

     

买入状态到可交易状态到冷冻期状态到

买入状态

0

什么都不干(yes)-prices[i](买股票)不能
可交易状态1不能什么都不干(yes)什么都不干(yes)
冷冻期状态2+prices[i](卖股票)不能不能

根据最近的一步来划分问题:

   

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

   

2. dp[i][1]=max(dp[i-1][1] , dp[i-1][2]

   

3. dp[i][2]=dp[i-1][0]+prices[i]

3. 初始化 :把dp表填满不越界,让后面的填表可以顺利进行

  

要想处于买入状态就需要进行买入: dp[0][0]=-prices[0]

   

dp[0][1]=0       dp[0][2]=0

4. 填表顺序 

    

本题的填表顺序是:从左往右,三个表同时填(因为填写其中一个表需要用到其他两个表)

5. 返回值 :题目要求 + 状态表示    

    

因为是要最大利润,所以买入状态不用考虑  

本题的返回值是:max(dp[n-1][1],dp[n-1][2])


4. 代码 

动态规划的固定四步骤:1.  创建一个dp表

                                        2. 在填表之前初始化

                                        3. 填表(填表方法:状态转移方程)

                                        4. 确定返回值

class Solution {
public:int maxProfit(vector<int>& prices) {int n = prices.size();//1.  创建一个规模(n+1*3)的dp表vector<vector<int>>dp(n, vector<int>(3));//2. 在填表之前初始化dp[0][0]=-prices[0];//3. 填表(填表方法:状态转移方程)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];}//4. 确定返回值return max(dp[n-1][1],dp[n-1][2]);}
};


未完待续~


http://www.mrgr.cn/news/69432.html

相关文章:

  • Cellebrite VS IOS18Rebooting
  • 如何查看本地的个人SSH密钥
  • JS 实现游戏流畅移动与按键立即响应
  • 数据分析丨世界杯冠军猜想:EA 体育游戏模拟能成功预测吗?
  • Spring Cloud Eureka 服务注册与发现
  • spring中entity的作用
  • Mysql基础 03 pymysql库、事务命令
  • 《Python编程实训快速上手》第四天--字符串操作
  • 【Java 多线程】:线程状态 线程操作 线程同步
  • Oracle OCP认证考试考点详解082系列17
  • 如何处理模型的过拟合和欠拟合问题
  • python可视化进阶
  • 科研绘图系列:R语言文章组合图形(barplot scatterplot)
  • Gen-RecSys——一个通过生成和大规模语言模型发展起来的推荐系统
  • 青藤深度参编的终端安全国家标准正式发布
  • 电商系统中,如何解决部分商品在短时间大量访问的单一热点问题?------Range范围分片
  • rce代码层面
  • Asyncio是Python库,它允许我们使用async/await语法编写并发代码。学习如何使用此库编写异步代码。
  • 探索10款音频剪辑软件,让你轻松编辑声音。
  • 链表类算法【leetcode】
  • 记录一次性能优化流程
  • Controlnet作者新作IC-light V2:基于FLUX训练,支持处理风格化图像,细节远高于SD1.5
  • 【1】虚拟机安装
  • AI 写作(五)核心技术之文本摘要:分类与应用(5/10)
  • 从0开始学习机器学习--Day20--优化算法的思路
  • Sequelize+Sqlite3使用示例