leetcode337
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。
设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):
你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
示例:
输入: [1,2,3,0,2]
输出: 3
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]
参考:做你爱吃的唐僧肉的leetcode题解。本题不是很会,第一次接触股票问题,这篇文章写得很清楚,此外还借鉴另一篇题解,解决股票这一类问题。上面写的很清楚,关键的点在代码已经标识。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
if(n <=1) return 0;
// d[n][k][t]
// n:第n天;
// k=0,不操作;k=1,卖;k=2,买
// t=0,无产品; t=1,有产品。
int d[n][3][2];
d[0][0][0] = 0; d[0][0][1] = INT_MIN;
d[0][1][0] = INT_MIN; d[0][1][1] = INT_MIN;
d[0][2][0] = INT_MIN; d[0][2][1] = -1 * prices[0];
for(int