多状态Dp问题——买卖股票的最佳时机含冷冻期

目录

一,题目

二,题目接口

三,解题思路及其代码


一,题目

给定一个整数数组prices,其中第  prices[i] 表示第 i 天的股票价格 。​

设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

  • 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入: prices = [1,2,3,0,2]
输出: 3 
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]

示例 2:

输入: prices = [1]
输出: 0

二,题目接口

class Solution {
public:int maxProfit(vector<int>& prices) {}
};

三,解题思路及其代码

首先,要明确的一点便是这道题还是一个多状态的dp问题。在这样一道题里面,在每一天都会有三种状态:1.今天处于卖出状态。

                          2.今天处于买入状态。

                          3.今天处于冷冻期。

在明确好这些状态以后,便可以开始列举这几种状态间的转换关系了。

      转换到卖出状态的情况:1.前一天处于买入状态,今天卖出股票。3.前一天处于卖出状态,这一天什么也不做。

      转换到买入状态:1.前一天处于冷冻期状态,今天买入。2.前一天处于买入状态,今天啥也不做。

     转换到冷冻期:1.前一天处于卖出状态。

画出状态转移图如下:

在推理完这些状态转移关系以后便可以推导出要求最大值的情况下的状态转移方程,设:f(i),g(i),x(i)分别是卖出状态,买入状态,冷冻期的最大利润。那便可以推导出如下的状态转移方程:

 f[i] = max(x[i-1]-prices[i],f[i-1]);g[i] = max(f[i-1]+prices[i],g[i-1]);x[i] = g[i-1];

然后在完成初始化以后便可以写出这道题的动态规划解法了,代码如下:

class Solution {
public:int maxProfit(vector<int>& prices) {int n = prices.size();vector<int>f(n);auto g = f;auto x = f;f[0]= -prices[0];//初始化for(int i = 1;i<n;i++){f[i] = max(x[i-1]-prices[i],f[i-1]);g[i] = max(f[i-1]+prices[i],g[i-1]);x[i] = g[i-1];}return max(x[n-1],g[n-1]);}
};

过啦!!! 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/168362.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

研究方法——案例研究设计与方法

作者&#xff1a;罗伯特K.殷 &#xff08;一&#xff09;计划&#xff1a;如何把握何处、何时用案例研究方法 1.问题&#xff1a; 按照作者的观点&#xff0c;案例研究1984年之后才逐渐得到重视&#xff0c;可是在数据信息有效收集的时代&#xff0c;几乎所有的经典都是以案例…

vue3+vite搭建后台项目-1 引入element-plus 中文包,打包时报错问题

vue3vite搭建后台项目-1 引入element-plus 中文包,打包时报错问题 终端报错 If theelement-pluspackage actually exposes this module, try adding a new declaration (.d.ts) file containing are moduleelement-plus/dist/locale/zh-cn.mjsdec import zhCn fromelement-plus…

归并分治 计算数组的小和 + 图解 + 笔记

归并分治 前置知识&#xff1a;讲解021-归并排序 归并排序 图解 递归 非递归 笔记-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/134338789?spm1001.2014.3001.5501原理&#xff1a; (1&#xff09;思考一个问题在大范围上的答案&#xff0c;是否等于&…

TMUX命令的基本操作和使用

tmux&#xff1a;是两个单词的缩写&#xff0c;即“Terminal MultipleXer”&#xff0c;意思是“终端复用器”。 TMUX使用场景&#xff1a;假如你需要跑大模型或者数据集特别大的AI任务时&#xff0c;它往往需要花较长时间才能跑完&#xff0c;在跑的过程中&#xff0c;不能断…

【Qt绘制小猪】以建造者模式绘制小猪

效果 学以致用&#xff0c;使用设计模式之建造者模式绘制小猪。 代码 接口&#xff1a;申明绘制的步骤 PigBuilder.h #ifndef PIGBUILDER_H #define PIGBUILDER_H#include <QObject> #include <QPainter>class PigBuilder : public QObject {Q_OBJECT public:ex…

autollm 指令设计

autollm 指令设计 可循环示意图文本 示意图AI解释可循环示意图 文本 示意图 # <|aos|>环境<|bos|>他人<|cos|>自己<|dos|>表示是否进行写python 代码来从外界获取辅助数据来重构 前面所有的信息<|eos|>代表是否生成python 代码控制各种外审设备…

设计模式之组合模式-创建层次化的对象结构

目录 概述概念主要角色应用场景 组合模式的实现类图NS图基本代码组合模式的精髓意外收获&#xff08;❀❀&#xff09; 应用示例-公司组织架构管理需求结构图代码 组合模式的优缺点优点缺点 总结 概述 概念 组合模式是一种结构型设计模式&#xff0c;它允许将对象组合成树形结…

元核云亮相金博会,智能质检助力金融合规

11月初&#xff0c;第五届中新&#xff08;苏州&#xff09;数字金融应用博览会&#xff5c;2023金融科技大会在苏州国际博览中心举办&#xff0c;围绕金融科技发展热点领域及金融行业信息科技领域重点工作&#xff0c;分享优秀实践经验&#xff0c;探讨数字化转型路径与未来发…

Vue3-组合式API下的父传子和子传父

组合式API下的父传子 基本思想&#xff1a; 1.父组件中给子组件绑定组件 2.子组件内部通过props选项接收 const propsdefineProps({属性名:类型}) 由于script上写了setup&#xff0c;所以无法直接配置props选项&#xff0c;所以需要借助于“编译器宏”函数接收传递的数据 …

基于element-plus定义表单配置化

文章目录 前言一、配置化的前提二、配置的相关组件1、新建form.vue组件2、新建input.vue组件3、新建select.vue组件4、新建v-html.vue组件5、新建upload.vue组件6、新建switch.vue组件7、新建radio.vue组件8、新建checkbox.vue组件9、新建date.vue组件10、新建time-picker.vue组…

arcgis 批量删除Table中的某些Field

当shp或者table文件较少时&#xff0c;可以手动删除每个文件中的某些字段&#xff0c;当文件较多时&#xff0c;就需要使用arcpy或者model进行处理。

Elasticsearch 和 Go 中使用向量搜索寻找地鼠

作者&#xff1a;CARLY RICHMOND&#xff0c;LAURENT SAINT-FLIX 就像动物和编程语言一样&#xff0c;搜索也经历了不同实践的演变&#xff0c;很难在其中做出选择。 加入我们的第二部分&#xff0c;通过 Elasticsearch 中的矢量搜索在 Go 中狩猎地鼠&#xff08;gophers&…