class Solution {
public:
int maxProfit(int k, vector<int>& prices) {
if (prices.empty() || k == 0) return 0;
vector<vector<int>> dp(prices.size(), vector<int>(2 * k, 0));
for (int i = 0; i < 2 * k; i += 2) {
dp[0][i] = -prices[0];
}
for (int i = 1; i < prices.size(); i++) {
for (int j = 0; j < 2 * k; j++) {
if (j == 0) {
dp[i][j] = max(dp[i - 1][j], -prices[i]);
} else if (j % 2 == 1) {
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1] + prices[i]);
} else {
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1] - prices[i]);
}
}
}
return dp[prices.size() - 1][2 * k - 1];
}
};