LeetCode309
来源:9-5 0-1背包问题
pfco
2019-06-27
老师可不可以给出309号问题的思路还有三种解法(递归,记忆化搜索,动态规划)
写回答
1回答
-
递归 & 记忆化搜索:
如果不加记忆化搜索会TLE,可以试试看:)
动态规划:
==========
buy[i] 表示的是截止到i时间点,最后一个操作是购买,剩余的钱。注意,是最后一个操作是购买,不一定在i这个节点购买;
sell[i] 表示的是截止到i时间点,最后一个操作是卖出,剩余的钱。注意,是最后一个操作是卖出,不一定在i这个节点卖出;
转移方程:
sell[i] = max(sell[i-1], buy[i-1] + prices[i]);
在i节点,或者和sell[i - 1]一致,即在i节点不卖;
或者在i节点卖出,这就需要看buy[i - 1]的钱,加上在i节点卖出得到的钱prices[i],二者取最大值;
buy[i] = max(buy[i-1], sell[i-2] - prices[i]);
在i节点,或者和buy[i - 1]一致,即在i节点不买;
或者在i节点购买,这就需要看sell[i - 2]的钱,因为不能连续购买;减去在i节点购买花费的钱prices[i],二者取最大值;
继续加油!:)
042019-06-28
相似问题