题解 | #牛群买卖计划II#

牛群买卖计划II

https://www.nowcoder.com/practice/3fa6bc9c3a724b4089eea26d3f87171b

考察的知识点:动态规划;

解答方法分析:

  1. 使用了一个三维的dp数组来记录状态和结果,具体为dp[i][j][0]和dp[i][j][1],可以推测两个状态分别表示某种状态下的最优解。
  2. 通过遍历循环,更新dp数组中的值。
  3. 返回最终的最优解。

所用编程语言: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;
    }
};

全部评论

相关推荐

07-17 11:27
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务