一、题目
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。
设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):
- 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
- 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
二、题解
该题,具体可以分为四个状态:
- 状态1:买入股票的状态
- 状态2:卖出股票,同时度过了冷冻期,也就是保持卖出的状态
- 状态3:今天卖出了股票
- 状态4:冷冻期,不可持续只有一天
(1)确定 dp 数组以及下标的含义
dp[i][j]
,第 i 天状态为 j,所剩的最多现金为 dp[i][j]
。
j 的状态为0,1,2,3 分别对应状态1,2,3,4
(2)确定递推公式
达到买入股票状态(状态一)即:dp[i][0],有两个具体操作:
操作一:前一天就是持有股票状态(状态一),dp[i][0] = dp[i - 1][0]
操作二:今天买入了,有两种情