LeetCode 188. Best Time to Buy and Sell Stock IV
Solution1:我的答案
参考链接:http://www.cnblogs.com/grandyang/p/4295761.html
当k >= prices.size()时,这道题是II,否则是III
class Solution {
public:
int maxProfit(int k, vector<int>& prices) {
if (prices.empty()) return 0;
if (k >= prices.size()) return other_max(prices);
int n = prices.size(), g[n][k+1] = {0}, l[n][k+1] = {0};
memset(g, 0, sizeof(g));
memset(l, 0, sizeof(l));
for (int i = 1; i < prices.size(); ++i) {
int diff = prices[i] - prices[i - 1];
for (int j = 1; j <= k; ++j) {
l[i][j] = max(g[i - 1][j - 1] + max(diff, 0), l[i - 1][j] + diff);
g[i][j] = max(l[i][j], g[i - 1][j]);
}
}
return g[n - 1][k];
}
private:
int other_max(vector<int>& prices) {
int n = prices.size();
int dp[n] = {0}, res = 0;
for (int i = 1; i < n; i++) {
dp[i] = max(0, prices[i] - prices[i-1]);
res += dp[i];
}
return res;
}
};