問題描述:
給定一個只含非負整數的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];
}
}
};
感想
這個題目比較簡單,狀態轉移方程比較好找。