給你乙個二維陣列, 二維陣列中的每個數都是正數, 要求從左上角走到右下角, 每一步只能向右或者向下。 沿途經過的數字要累加起來。 返回最小的路徑和。
解:暴力遞迴
* 因為是從左上角到右下角,只能向右或者向下,
* 可以使用遞迴,
* 把問題簡化為
* 當前位置(i, j)和右邊位置(i + 1, j)和下面位置(i, j + 1)之間的問題
* base case:
* 當i == row - 1 && j == col - 1時,位於矩陣右下角,即為最終結果
* 當i == row - 1時,位於最後一行,此時只能向右走
* 當j == col - 1時,位於最右一行,此時只能向下走
* 當位於矩陣中間某個位置時(i, j),
* 此時要判斷右邊位置(i + 1, j)和下面位置(i, j + 1)中的值誰大誰小
動態規劃
* 是從結果倒推回去推初始狀態
* 1.dp陣列的維度與大小:遞迴中的可變引數是 i, j 兩個,所以dp陣列是二維的 dp[matrix.length][matrix[0].length]
* 2.dp中需要位置為 初始位置(0, 0)
* 3.利用base case把不被依賴的位置標出來:
* 右下角位置
* 4.根據下面的遞迴呼叫分析普遍位置中的依賴關係:
* 最下面一行(row - 1, j)依賴的位置是(row - 1, j + 1)
* 最右邊一列(i, col - 1)依賴的位置是(i + 1, col - 1)
* 當前位置(i, j)依賴的位置有(i + 1, j), (i, j + 1)
暴力遞迴版本:
//正著遞迴public static int minpath1(int matrix)
public static int path(int matrix, int i, int j)
其實還可以倒著遞迴
改為動態規劃版本:
正著推不被依賴的位置是(0, 0),
普通位置的依賴關係:(i, j) 依賴它左邊(i, j - 1)和上邊(i - 1, j)位置
最終結果是(row - 1, col - 1)
//正著推public static int dpminpath1(int matrix)
//最上面一行,只能從左邊往右邊走
for(int i = 1; i < col; i++)
//普通的位置(i, j),可以從左邊到達(i, j - 1),也可以從上邊到達(i - 1, j)
for(int i = 1; i < row; i++)
}return dp[row - 1][col - 1];
}
還可以倒著推
不被依賴的位置(row - 1, col - 1)
普通位置的依賴關係:(i, j)依賴它右邊(i, j + 1)和下邊(i + 1, j)的位置
最終結果是(0, 0)位置的值
//倒著推public static int dpminpath2(int matrix)
system.out.println();
//最下面一行
for(int i = col - 2; i >= 0; i--)
//普通位置的值
for(int i = row - 2; i >= 0; i--)
}return dp[0][0];
}
測試**
生成隨機矩陣
public static int generaterandommatrix(int row, int col)}return matrix;
}
測試**:
public static void main(string args) , , , };system.out.println(minpath1(m));
system.out.println(dpminpath1(m));
system.out.println(dpminpath2(m));
m = generaterandommatrix(6, 7);
system.out.println(minpath1(m));
system.out.println(dpminpath1(m));
system.out.println(dpminpath2(m));
}
動態規劃 矩陣最小路徑和
int min int a,int b int getmin vector map,int n,int m dp 0 0 map 0 0 for int i 1 i m i dp 0 i dp 0 i 1 map 0 i for int i 1 i n i dp i 0 dp i 1 0 map i...
動態規劃 矩陣最小路徑和
演算法專題導航頁面 題目描述 給定乙個 n m 的矩陣 a,從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的數字累加起來就是路徑和,輸出所有的路徑中最小的路徑和。輸入描述 第一行輸入兩個整數 n 和 m,表示矩陣的大小。接下來 n 行每行 m 個整數表示矩陣。輸出描述 輸出乙個...
矩陣的最小路徑和 動態規劃
題目描述 給定乙個 n m 的矩陣 a,從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的數字累加起來就是路徑和,輸出所有的路徑中最小的路徑和。示例 1,3,5,9 8,1,3,4 5,0,6,1 8,8,4,0 返回值 備註 1 n,m 2000 1 arri,j 100 我的...