这道题之前已经在DP上面学到了,但是这次有cooldown,但是我们依然应该要从dp入手,但是我感觉我自己dp学的还是很不好,或者说不知道从哪里下手。这次看了小明(bilibili: https://space.bilibili.com/478428905
)的视频,感觉思路比较清晰,他就是要分几种情况来记忆。
第一种情况:就代表当前持有股票。用f[i][0]来记录,而f[i]就代表在第i天获得的最大收益是多少。
第二种情况:第i天买了股票,处于冷冻期(无法买入),用f[i][1] 来记录
第三种情况:没有持有股2票,也没有冷冻期(就是可以买入的状态)。用f[i][2]来表示。
我觉得作者这种思路跟我一开始想的没太大区别,只不过我是想f[i][0]可以买入,
f[i][1]再冷冻期,f[i][2]当前持有股票
额。最后一个情况(作者的第一种情况)我一开始没想到啊,我觉得为什么持有也算作状态之一?因为不能每天都买嘛?要算收益的关系?
转移方程很重要……
转移方程是什么?
转移方程实际上就是你在定义状态之后如何去一步步记录你的答案,保证最后能够返回你的答案。
f[i][0] = max(f[i - 1][0], f[i - 1][2] - prices[i]) 这里用i-1天(也就是昨天)的最大收益来和i-1天花掉投资的钱之后进行比较,实际上就是说如果i-1之前盈利的话,那么i-1天花掉投资之后可能还会更多。
f[i][1] = f[i - 1][1] + prices[i] ??这块没看懂…… 哦哦,因为f[i][1]是代表冷冻期,所以就是说第i天你卖掉了手上的股票,所以要加上第i天的价格,就是你的利润。
f[i][2] = max(f[i-1][0],f[i][2])
return max(f[n-1][1], f[n-1][2])
网友评论