• acwing 60. 礼物的最大价值


    地址 https://www.acwing.com/problem/content/56/

    在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。

    你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。

    给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?

    注意:

    • m,n>0m,n>0

    样例:

    输入:
    [
      [2,3,1],
      [1,7,1],
      [4,6,1]
    ]
    
    输出:19
    
    解释:沿着路径 23761 可以得到拿到最大价值礼物。

    解法

    动态规划 由于只能在格子上 向右或者向下走 那么可以得到状态转移方程

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

    class Solution {
    public:
        int getMaxValue(vector<vector<int>>& grid) {
            if(grid.size() == 0 || grid[0].size() == 0) return 0;
            
            int n = grid.size(); int m = grid[0].size();    
            vector<vector<int>> dp(n+10,vector<int>(m+10,0));
            
            dp[0][0] = grid[0][0];
            for(int i =0;i < n;i++){
                for(int j = 0;j <m;j++){
                    dp[i][j] = grid[i][j];
                }
            }
            
            for(int i = 0 ;i < n ;i++){
                for(int j = 0;j < m;j++){
                    int up = 0;int left = 0;
                    if(i-1 >= 0) up = dp[i-1][j];
                    if(j-1 >=0) left = dp[i][j-1];
                    dp[i][j] += max(up,left);
                }
            }
            
            return dp[n-1][m-1];
            
        }
    };
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    [记录]MySQL 查询无法导出到文件
    Unity3D 在Update中不要过多地修改Transform 信息
    Unity3D 中 脚本(MonoBehaviour) 生命周期WaitForEndOfFrame需要注意的地方
    RunTime的简单使用
    GIT命令行的使用
    UIImagePickerController和UIAlertController结合使用
    NSSortDescriptor对象进行数组排序
    for..in遍历,枚举器
    Objective
    Objective
  • 原文地址:https://www.cnblogs.com/itdef/p/11437596.html
Copyright © 2020-2023  润新知