问题描述:
给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。
注意事项
你在同一时间只能向下或者向右移动一步
状态转移方程 a[i][j]= a[i][j]+max{}a[i-1][j],a[i][j-1]},注意变得情况会简化
代码
class Solution {
public:
/*
* @param grid: a list of lists of integers
* @return: An integer, minimizes the sum of all numbers along its path
*/
int minPathSum(vector<vector<int>> &grid) {
// write your code here
int m=grid.size();
int n=grid[0].size();
if(m==1&&n==1) return grid[0][0];
else
{int a[m][n];
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=grid[i][j];
if(i==0&&j==0) a[i][j]=grid[i][j];
else
{
if(j>0)
{
if(i==0) a[0][j]+=a[0][j-1];
else
{
if(a[i-1][j]<a[i][j-1]) a[i][j]+=a[i-1][j];
else a[i][j]+=a[i][j-1];
}
}
else a[i][0]+=a[i-1][0];
}
}
}
return a[m-1][n-1];
}
}
};
感想
这个题目比较简单,状态转移方程比较好找。