3
int solve(int ind, int buy, int k, vector<int> &prices, vector<vector<vector<int>>> &dp) {4
if (k == 0 || ind == prices.size()) return 0;5
if (dp[ind][buy][k] != -1) return dp[ind][buy][k];7
return dp[ind][buy][k] = max(-prices[ind] + solve(ind + 1, 0, k, prices, dp),8
solve(ind + 1, 1, k, prices, dp));10
return dp[ind][buy][k] = max(prices[ind] + solve(ind + 1, 1, k - 1, prices, dp),11
solve(ind + 1, 0, k, prices, dp));13
int maxProfit(int k, vector<int> &prices) {14
vector<vector<vector<int>>> dp(prices.size(), vector<vector<int>>(2, vector<int>(k + 1, -1)));15
return solve(0, 1, k, prices, dp);