波波老师,今天在做309题的时候,然后题目做完了,在想优化解法的时候突然有个问题把我搞懵逼了,您可以帮我看看嘛?309题的思路我先说下:
dp[i][j]表示 [0, i] 区间内,到第 i 天(从 0 开始)状态为 j 时的最大收益。
这里 j 取三个值:
0 表示不持股;
1 表示持股;
2 表示处在冷冻期。
一、不持股可以由这两个状态转换而来:(1)昨天不持股,今天什么都不操作,仍然不持股。(2)昨天cooldown,今天任然不做任何操作
二、持股可以由这两个状态转换而来:(1)昨天持股,今天什么都不操作,仍然持股;(2)昨天不持股,今天买了一股;
三、cooldown:前一天股票卖了,今天冷冻
代码如下:
dp[i][0]=max(dp[i-1][0],dp[i-1][2])
dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i])
dp[i][2]=dp[i-1][1]+prices[i]
这里是AC了,但是我在想优化空间的时候,突然想到一个问题:
dp[i][2]=dp[i-1][1]+prices[i]
对于第i天的cooldown,题目的意思是必须前一天卖出,今天【i】cooldown,也就是说,必须前一天的前一天【i-2】持有,前一天【i-1】卖出,今天【i】cooldown,那么这里这样写不就错了么?这里的意思分明是昨天【i-1】持有,今天【i】卖出后就只是今天cooldown。但是题目上是这样的:After you sell your stock, you cannot buy stock on next day. (ie, cooldown 1 day)
我看了下网上很多的答案解析都是这样定义的,我实在有些困惑,波波老师您可以帮帮我嘛?