给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。

注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

解法

123. 买卖股票的最佳时机III一样的思路。

class Solution {
public:
    int maxProfit(int k, vector<int>& prices) {
    if (prices.empty()) return 0;
    if(k>=prices.size()) return quickSolution(prices);

    vector<int> dp(k+1, 0);
    vector<int> minCost(k+1, prices[0]);

    for (int i=1;i<prices.size();i++){
        for(int k=1;k<minCost.size();k++){
            minCost[k]=min(minCost[k], prices[i]- dp[k-1]);
            dp[k]=max(dp[k],prices[i]-minCost[k]);
        }
    }  

    return dp[k];
    }

    int quickSolution(vector<int>& prices){
        int profit=0;
        for(int i=1;i<prices.size();i++){
            if(prices[i]>prices[i-1]){
                profit+=prices[i]-prices[i-1];
            }
        }
        return profit;
    }
};