最大权值和路径

有一个机器人位于一个 m × n 个网格的右上角。
机器人每一时刻只能向下或者向左移动一步。机器人试图达到网格的左下角。每个网格上有一个数字权值,机器人希望它走到左下角的路径权值和最大
问这个最大路径权值和是多少?

样例

例1:

输入:
[
[1,2,3,4],
[3,5,6,7],
[9,10,1,2],
[4,4,5,5]
]
输出: 45.
解释:
The path is [4,7,6,5,10,9,4].

例2:

输入:
[
[1,2,3],
[4,5,6],
[7,9,8]
]
输出:33.
解释:
The path is [3,6,8,9,7].

注意事项

  • 输入一个n x m 的矩阵,保证 n <= 200,m <= 200
  • 题目数据保证 0 <= i <= n-1 , 0 <= j <= m-1nums[i][j] <= 100000
class Solution {
public:
    /**
     * @param nums: 
     * @return: nothing
     */
    int maxWeight(vector<vector<int>> &nums) 
    {
        vector<vector<int>> dp = nums;
        for(int i = 0; i < dp.size();  i++)
        {
            for(int j = dp[i].size()-1; j >=0 ; j--)
            {
                if(i == 0 && j < dp[i].size()-1)
                {
                    dp[i][j] = dp[i][j+1] + nums[i][j];
                }
                else if((j ==  dp[i].size()-1 ) && i > 0)
                {
                    dp[i][j] = dp[i-1][j] + nums[i][j];
                }
                else if(i >= 1 && j < dp[i].size()-1)
                {
                    dp[i][j] = max(dp[i][j+1], dp[i-1][j]) + nums[i][j];
                }
                cout<<dp[i][j]<<" ";
            }
            //return 0;
            cout<<endl;
        }
        
        return dp[nums.size()-1][0];
        
    }
};

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值