题目:
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
思路:
转移方程:dp[i][j] = min(grid[m - i][n - j] + dp[i - 1][j],grid[m - i][n - j] + dp[i][j - 1])。
程序:
class Solution {
public:
int minPathSum(vector<vector<int> >& grid) {
int m = grid.size();
int n = grid[0].size();
vector<vector<int> > dp(m + 1,vector<int>(n + 1,0));
dp[1][1] = grid[m - 1][n - 1];
for(int i = 2;i <= m;i++)
dp[i][1] = grid[m - i][n - 1] + dp[i - 1][1];
for(int i = 2;i <= n;i++)
dp[1][i] = grid[m - 1][n - i] + dp[1][i - 1];
for(int i = 2;i <= m;i++)
{
for(int j = 2;j <= n;j++)
dp[i][j] = min(grid[m - i][n - j] + dp[i - 1][j],grid[m - i][n - j] + dp[i][j - 1]);
}
return dp[m][n];
}
};