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

动态规划-简单多状态dp问题 – 买卖股票的最佳时机含冷冻期

题目重现

题目链接:买卖股票的最佳时机含冷冻期 - 力扣

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

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

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= prices.length <= 5000
  • 0 <= prices[i] <= 1000

读懂题目

解决这道题首先我们需要特别注意冷却期的存在,卖出股票后,无法在第二天买入股票 (即冷冻期为 1 天), 这就意味着每次买入后自行转入可卖出状态需要经历一天时间。

于是我们画出三种不同状态之间的转化图如下:

在这里插入图片描述

算法流程

1.状态表示

对于此题,根据经验+题目要求,这里设定状态表示为 “以 i 位置为结尾 … …” 。结合题目所求最大利润的金额,所以设定 dp[i] 为第 i 天所能获得的最大利润

但是由于题中对于每天都有三种不同的状态,于是 dp[i] 可以被细分为 dp[0] [i] 、dp[1] [i] 、dp[2] [i] 共对应三种不同的状态。

  • dp[0] [i] 表示:第 i 天结束后,处于 “买入” 状态,此时的最大利润;
  • dp[1] [i] 表示:第 i 天结束后,处于 “(可)卖出” 状态,此时的最大利润;
  • dp[2] [i] 表示:第 i 天结束后,处于 “冷冻期” 状态,此时的最大利润。

2.状态转移方程

由于 “冷冻期” 属于过程中的一个状态,所以不必特殊关照。

  • 处于 “买入” 状态时:
    • 我们有两种选择:1.卖出股票;2.继续持有股票
  • 处于 “卖出” 状态时:
    • 有两种情况:1.冷冻期内,不能买入;2.非冷冻期内,可以买入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

螺蛳粉只吃炸蛋的走风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值