题目:
Say you have an array for which the ith element is the price of a given stock on day i.
Design an algorithm to find the maximum profit. You may complete at most k transactions.
Note:
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
思路:先用II中贪心算法求解,讲贪心算法进行的交易数与k进行比较,如果小k<=贪心算法的交易数,直接返回贪心算法的结果,否则进行DP。递推公式参考
http://segmentfault.com/a/1190000002565570
代码如下
class Solution {
public:
int maxProfit(int k, vector<int>& prices) {
if(prices.empty()||prices.size()<2)
return 0;
int maxProfit=0;
int i=0;
int time=0;
while(i<prices.size()-1){
if(prices[i+1]>prices[i]){
maxProfit=maxProfit+prices[i+1]-prices[i];
time++;
}
i++;
}
if(time<=k)
return maxProfit;
int local[k+1][prices.size()];
int global[k+1][prices.size()];
for(int i=0;i<=k;i++)
for(int j=0;j<prices.size();j++){
local[i][j]=0;
global[i][j]=0;
}
for(int i=1;i<=k;i++){
for(int j=1;j<prices.size();j++){
int diff=prices[j]-prices[j-1];
local[i][j] = max(global[i-1][j-1],local[i][j-1]+diff);
global[i][j] = max(global[i][j-1],local[i][j]);
}
}
return global[k][prices.size()-1];
}
};