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

兰州百姓网免费发布信息网站如何做一份企业网站规划

兰州百姓网免费发布信息网站,如何做一份企业网站规划,自动做网站的ai,中国网站排行榜1. 买卖股票的最佳时机III 题目链接: 123. 买卖股票的最佳时机 III - 力扣(LeetCode)https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/description/ 2. 题目解析 3. 算法原理 状态表示:以某一个位置为结尾或者…

1. 买卖股票的最佳时机III

题目链接:

123. 买卖股票的最佳时机 III - 力扣(LeetCode)icon-default.png?t=O83Ahttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/description/

 


2. 题目解析 


3. 算法原理

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

  

dp[i]表示:第i天结束之后,此时的最大利润 :两种情况:

   

1. f[i][j]表示:第i天结束之后,完成了j次交易,处于买入状态,此时的最大利润

  

2. g[i][j]表示:第i天结束之后,完成了j次交易,处于卖出状态,此时的最大利润

2. 状态转移方程

  

在第i-1天处于买入状态,看买入状态能不能到自己,看卖出状态能不能到买入状态,另一个状态也是如此,一共4种状态

  

买入状态到卖出状态到
买入状态什么都不干-prices[i](买股票)
卖出状态+prices[i](交易次数+1)什么都不干

1. f[i][j] = max(f[i-1][j] , g[i-1][j] - prices[i])

  

2. g[i][j] = max(g[i-1][j] , f[i-1][j-1] + prices[i]

  

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

  

因为是在第i-1天处于买入/卖出状态,所以当交易次数为0时,就相当于在第i天为-1,那么就会导致越界

 

所以我们可以修改一下第二个状态转移方程来判断一下,我们可以看到卖出状态到自己的情况是不会改变的,所以只用修改买入状态到卖出状态  :

  

                                                1. g[i][j] = g[i-1][j](此状态一定不会越界)

   

                                                2. if(j-1>=0)     g[i][j] = max(g[i][j] , f[i-1][j-1] + prices[i]

  

在查找f[i-1][j-1] + prices[i]状态的时候先判断一下 下标是否合法(if(j-1>=0)),然后再求max 

定义一个正无穷大/小的时候涉及到需要进行加减操作的时候,不要使用INT_MIN/MAX,因为如果INT_MIN减去一个数的话就会变成一个非常大的整数而导致溢出,所以我们最好用 +/- 0x3f3f3f3f 来表示最小值

   

  

本题初始化就是先将表里的所有值都初始化为-无穷大,再把f[0][0] = --prices[0],g[0][0] = 0 

4. 填表顺序 

    

本题的填表顺序是:从上往下填写每一行,每一行从左往右,两个表同时填

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

    

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

本题的返回值是:g表里最后一行里面的最大值


4. 代码  

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

                                        2. 在填表之前初始化

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

                                        4. 确定返回值

class Solution {
public:const int INF=0x3f3f3f3f;//将无穷大赋予给INFint maxProfit(vector<int>& prices) {int n = prices.size();//1.  创建dp表//3:交易次数的三列:0,1,2,再将所有的位置都变成负无穷大vector<vector<int>>f(n,vector<int>(3,-INF));auto g=f;//2. 在填表之前初始化f[0][0]=-prices[0];g[0][0]=0;//3. 填表(填表方法:状态转移方程)for(int i=1;i<n;i++){for(int j=0;j<3;j++)//j只有0,1,2三种状态{f[i][j]=max(f[i-1][j],g[i-1][j]-prices[i]);g[i][j]=g[i-1][j];if(j>=1)g[i][j]=max(g[i][j],f[i-1][j-1]+prices[i]);}}//g表里最后一行里面的最大值int ret=0;for(int j=0;j<3;j++)ret=max(ret,g[n-1][j]);return ret;}
};


未完待续~

http://www.yayakq.cn/news/286278/

相关文章:

  • 报关做业务可以上哪些网站html超链接
  • 网站开发文档总结wordpress获取图片原图
  • wordpress建立php站点地图手游开发
  • 网站建设关键词没有文章更新的网站怎么做优化
  • 网站备案 取名资讯通不过做题网站中计算多项式的值怎么做
  • 沈阳怎么做网站营销型网站和展示型网站的区别
  • 网站开发数据库设计的作用客户网站建设
  • 未备案 网站加速网店营销策划方案范文
  • 临沂网站维护公司全国设计网站公司
  • 天津企业网站设计报价创意灵感
  • 昆明做网站找启搜网络嵌入式软件开发工程师证书
  • 景德镇市场建设局网站鲁山网站建设
  • 凡科建设网站还用买服务器吗重庆做优化的网络公司
  • phpstud可以做几个网站微信小程序界面设计
  • 网站开发员需要什么素质法律咨询东莞网站建设
  • 怎么做织梦网站1688网
  • 网站模板怎么修改青岛网站建设公司在哪
  • 网站建设方案计划书工程项目信息
  • 吉林省城乡建设官方网站百度验证网站所有权
  • uugaicomlogo免费设计网站回收手表的网站
  • dede 更新网站地图网站开发从入门到实战
  • 石狮建设银行网站网络营销的多种形式和特点
  • 廊坊建设企业网站出国游做的好的网站
  • 网站首页做跳转苏州市网站建设培训
  • 做海报的网站什么编辑器4399小游戏网页版在线玩
  • 义乌商城网站开发番禺网站优化平台
  • 微信企业网站模板公司网站建设应注意
  • 西安企业网站设计机构wordpress数据库分离
  • 代做毕设网站推荐成都官方网站建设
  • 专业做鞋子的网站吗哪个网站做视频赚钱