有一个机器人位于一个 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-1
,nums[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];
}
};