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

day-50 代码随想录算法训练营(19)动态规划 part 11

123.买卖股票的最佳时机|||

分析:只能买卖两次,就是说有五个状态:
  • 没有买过
  • 第一次买入
  • 第一次卖出
  • 第二次买入
  • 第二次卖出
思路:二维数组,记录五个状态
  • 1.dp存储:dp[i][1] 第一次买入   dp[i][2] 第一次卖出  dp[i][3] 第二次买入  dp[i][4] 第二次卖出
  • 2.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])
    • dp[i][4]=max(dp[i-1][4],dp[i-1][3]+prices[i])
  • 3.初始化:dp[0][1]=-prices[0]    dp[0][3]=-prices[0]
  • 4.遍历顺序:1~n
class Solution {
public:int maxProfit(vector<int>& prices) {int n=prices.size();vector<vector<int>> dp(n,vector<int>(5,0));dp[0][1]=-prices[0];dp[0][3]=-prices[0];for(int i=1;i<n;i++){dp[i][0]=dp[i-1][0];//第一天不持有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]);dp[i][4]=max(dp[i-1][4],dp[i-1][3]+prices[i]);}return dp[n-1][4];}
};

188.买卖股票的最佳时机IV

分析:买卖几次成了变量
思路:
  • 1.dp存储:2k+1个状态的买卖金额
  • 2.动态转移方程(递推式):
    • j奇数:dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]-prices[i])
    •  j偶数:dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]+prices[i])
  • 3.初始化:j奇数:dp[i][j]=-prices[0]
  • 4.遍历顺序:1-n
class Solution {
public:int maxProfit(int k, vector<int>& prices) {int n=prices.size();int m=k*2;vector<vector<int>>dp(n,vector<int>(m+1,0));for(int i=1;i<=m;i+=2) dp[0][i]=-prices[0]; //初始化for(int i=1;i<n;i++){dp[i][0]=dp[i-1][0];//第一天不持有for(int j=1;j<m+1;j++){if(j%2!=0) dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]-prices[i]);//第j天持有else dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]+prices[i]);//第j天卖出}}return dp[n-1][m];}
};

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

分析:现在有四种状态:买入股票 冷冻期后没买入   卖出股票   冷冻期
思路:dp存储四种状态
  • 1.dp存储:四种状态
  • 2.动态转移方程(递推式):
    • dp[i][0]=max(dp[i-1][0],max(dp[i-1][1]-prices[i],dp[i-1][3]-prices[i]))
    • dp[i][1]=max(dp[i-1][1],dp[i-1][3])
    • dp[i][2]=dp[i-1][0]+prices[i]
    • dp[i][3]=dp[i-1][2]
  • 3.初始化:dp[0][0]=-prices[0]
  • 4.遍历顺序:1~n
class Solution {
public:int maxProfit(vector<int>& prices) {int n=prices.size();vector<vector<int>>dp(n,vector<int>(4,0));dp[0][0]=-prices[0];for(int i=1;i<n;i++){dp[i][0]=max(dp[i-1][0],max(dp[i-1][1]-prices[i],dp[i-1][3]-prices[i]));//持有dp[i][1]=max(dp[i-1][1],dp[i-1][3]);//冷冻期后面不持有dp[i][2]=dp[i-1][0]+prices[i];//卖出dp[i][3]=dp[i-1][2];//冷冻期}return max(dp[n-1][3],max(dp[n-1][1],dp[n-1][2]));//最大值一定不持有}
};

http://www.lryc.cn/news/168624.html

相关文章:

  • 自定义权限指令与防止连点指令
  • UE5、CesiumForUnreal实现瓦片坐标信息图层效果
  • PostgreSQL执行计划
  • 【2023 睿思芯科 笔试题】~ 题目及参考答案
  • Java手写AVL树
  • 运维自动化:提高效率的秘诀
  • C++设计模式_05_Observer 观察者模式
  • github网站打不开,hosts文件配置
  • 总结PCB设计的经验
  • HCIE-HCS规划设计搭建
  • c语言输出杨辉三角
  • 性能测试-持续测试及性能测试建设(22)
  • 嵌入式C 语言中的三块技术难点
  • 【斗破年番】紫研新形象,萧炎终成翻海印,救援月媚,三宗决战
  • 差分方程模型:国民总收入(GDP)的乘数-加速数模型
  • 【C语言】指针和数组笔试题解析(1)
  • Vue中组件的三种注册方式
  • docker 和k8s 入门
  • 基于Yolov8的交通标志牌(TT100K)识别检测系统
  • 使用Python编写一个多线程的12306抢票程序
  • DT Paint Effects工具(三)
  • SpringBoot整合Mybatis
  • Java后端使用POST请求向mysql中插入Json数据的问题
  • 豆瓣图书评分数据的可视化分析
  • SpringBoot整合Easy-ES操作演示文档
  • IDEA控制台取消悬浮全局配置SpringBoot配置https
  • MySQL8--my.cnf配置文件的设置
  • Qt基于paintEvent自定义CharView
  • Mac FoneLab for Mac:轻松恢复iOS数据,专业工具助力生活
  • 代码随想录二刷day30