感觉这是一系列的动态规划的算法,正好也将动态规划的算法进行一个总结:
算法一:
带权重的最小路径的问题
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.
首先每一个路径的上一个路径都是来自于其上方和左方
现将最上面的路径进行求和,最左边的路径进行求和(这里没有直接求和的原因是因为用一个一维数组res[n]记录路径,这里比较巧妙得节约了空间,所以将最左边的求和算法放到了循环里面 res[i][j] = min(res[i-1][j],res[i][j-1])+val[i][j] )
class Solution {
public:
int minPathSum(vector<vector<int> > &grid) {
if(grid.empty() || grid[0].empty())
{
return 0;
}
int m = grid.size();
int n = grid[0].size();