![]()
class Solution {
public int maxProfit(int k, int[] prices) {
int n = prices.length;
if(n < 2) return 0;
if(k >= n) {
int res = 0;
for(int i = 1; i < n; i++) {
res += Math.max(0,prices[i] - prices[i-1]);
}
return res;
}
int[] l = new int[k+1]; // l[i][j]当前第i天最多完成j比交易且最后一次交易在第i天完成
int[] g = new int[k+1];// g[i][j]当前第i天最多完成j比交易
for(int i = 1; i < n; i++) {
int diff = prices[i] - prices[i-1];
for(int j = k; j > 0; j--) {
l[j] = Math.max(g[j-1],l[j]) + diff;
g[j] = Math.max(g[j],l[j]);
}
}
return g[k];
}
}