题解 | #牛群买卖计划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;
}
};
查看6道真题和解析