题解 | #牛群买卖计划II#
牛群买卖计划II
https://www.nowcoder.com/practice/3fa6bc9c3a724b4089eea26d3f87171b
考察的知识点:动态规划;
解答方法分析:
- 使用了一个三维的dp数组来记录状态和结果,具体为dp[i][j][0]和dp[i][j][1],可以推测两个状态分别表示某种状态下的最优解。
- 通过遍历循环,更新dp数组中的值。
- 返回最终的最优解。
所用编程语言:C++;
完整编程代码:↓
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param prices int整型vector * @param k int整型 * @return int整型 */ int maxProfitII(vector<int>& prices, int k) { int n = prices.size(); int dp[1005][1005][2]; memset(dp, -0x3f, sizeof dp); for (int i = 0; i <= n; i++)dp[i][0][0] = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= k; j++) { dp[i][j][0] = max(dp[i - 1][j][0], dp[i - 1][j][1] + prices[i - 1]); dp[i][j][1] = max(dp[i - 1][j][1], dp[i - 1][j - 1][0] - prices[i - 1]); } } int res = 0; for (int i = 0; i <= k; i++)res = max(dp[n][i][0], res); return res; } };