public int maxProfit(int k
, int[] prices
) {
int n
= prices
.length
;
if (n
<= 1) return 0;
if (k
>= n
/ 2) {
int[] dp
= new int[2];
dp
[0] = 0;
dp
[1] = -prices
[0];
for (int i
= 1; i
< n
; i
++) {
dp
[0] = Math
.max(dp
[0], dp
[1] + prices
[i
]);
dp
[1] = Math
.max(dp
[1], dp
[0] - prices
[i
]);
}
return dp
[0];
}
else {
int[][] dp
= new int[k
+1][2];
for (int i
= 1; i
<= k
; i
++) {
dp
[i
][1] = -prices
[0];
}
for (int i
= 1; i
< n
; i
++) {
for (int j
= 1; j
<= k
; j
++) {
dp
[j
][0] = Math
.max(dp
[j
][0], dp
[j
][1] + prices
[i
]);
dp
[j
][1] = Math
.max(dp
[j
][1], dp
[j
-1][0] - prices
[i
]);
}
}
return dp
[k
][0];
}
}
转载请注明原文地址:https://tech.qufami.com/read-23513.html