题目描述
给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iv
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例
输入:k = 2, prices = [2,4,1]
输出:2
解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iv
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码
class Solution {
public:
int maxProfit(int k, vector<int>& prices) {
int n=prices.size();
if(n<=1 || k==0) return 0;
vector<int> dp(2*k,0);
int i,j;
for(i=0;i<k;i++)
{
dp[2*i]=-prices[0];
}
for(i=1;i<n;i++)
{
dp[0]=max(dp[0],-prices[i]);
dp[1]=max(dp[1],dp[0]+prices[i]);
for(j=1;j<k;j++)
{
dp[2*j]=max(dp[2*j],dp[2*j-1]-prices[i]);
dp[2*j+1]=max(dp[2*j+1],dp[2*j]+prices[i]);
}
}
return dp[2*k-1];
}
};