题解 | #年终奖# 动态规划

年终奖

https://www.nowcoder.com/practice/72a99e28381a407991f2c96d8cb238ab

定义dp[i][j]表示走到i行j列时能获得的最高奖金,由于只能向右走或者向下走,要求最高奖金,那么可得转移方程:

dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]) + board[i][j]

即当前能获得的最大奖金为 左边和上边一格中的较大值+当前格子的值

#include <vector>
class Bonus {
  public:
    int getMost(vector<vector<int> > board) {
        vector<vector<int>> dp(6, vector<int>(6, 0));
        dp[0][0] = board[0][0];
        // 注意第一列、第一行只能选择直直走
        for (int i = 1; i < 6; i++) {
            dp[i][0] = dp[i - 1][0] + board[i][0];
        }
        for (int j = 1; j < 6; j++) {
            dp[0][j] = dp[0][j - 1] + board[0][j];
        }
        for (int i = 1; i < 6; i++) {
            for (int j = 1; j < 6; j++) {
                dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]) + board[i][j];
            }
        }
        return dp[5][5];
    }
};

时间复杂度:O(1),由于题目规定了是6*6大小的格子

空间复杂度:O(1),由于题目规定了是6*6大小的格子

全部评论

相关推荐

07-11 22:27
中南大学 Java
程序员牛肉:学历的话没问题。但是没问题的也就只有学历了。 其实你的整体架构是正确的,博客接着干。但是项目有点过于简单了。从后端的角度上讲,你这也就是刚入门的水平,所以肯定约面试够呛。 如果你要应聘后端岗位,那你第一个项目竟然是仿写操作系统。这个你要面试官咋问你。你一定要记住一点,你简历上写的所有的东西,都是为了证明你有能力胜任当前的岗位,而不是为了证明你自己会什么。 如果你只是浅浅的做几个项目,描述也都是烂大街。技术点也都是各种混水类的配置类需求,那你就不要幻想自己能走多远。一定要保持思考,保持学习。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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