1. 程式人生 > >110 最小路徑和

110 最小路徑和

路徑 網格 ret grid item down box scrip code

原題網址:https://www.lintcode.com/problem/minimum-path-sum/description

描述

給定一個只含非負整數的m*n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。

你在同一時間只能向下或者向右移動一步

標簽 動態規劃(DP) 思路:同數字三角形,創建動態規劃數組dp【m】【n】,dp【i】【j】表示從左上角出發到達終點grid【i】【j】的最小路徑和。 狀態轉移方程:dp【i】【j】= min(dp【i-1】【j】,dp【i】【j-1】)+ grid【i】【j】; 為計算方便,第一行和第一列可以單獨初始化。 最後 return dp【m-1】【n-1】。 AC代碼:
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 row=grid.size(); if (row==0) {
return 0; } int col=grid[0].size(); vector<vector<int>> dp(row,vector<int>(col,0)); dp[0][0]=grid[0][0]; for (int i=1;i<row;i++)//第一列; { dp[i][0]=dp[i-1][0]+grid[i][0]; } for (int j=1;j<col;j++)//第一行; { dp[0][j]=dp[0][j-1]+grid[0][j]; }
for (int i=1;i<row;i++) { for (int j=1;j<col;j++) { dp[i][j]=min(dp[i][j-1],dp[i-1][j])+grid[i][j]; } } return dp[row-1][col-1]; } };

110 最小路徑和