給定乙個矩陣m, 從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的樹子累加起來就是路徑和,返回所有的路徑中最小的路徑和.
這是一道經典的動態規劃題,狀態轉移方程為dp[i][j] = min + m[i][j].可以用乙個二維的dp矩陣來求解.對於dp矩陣,第一行和第一列只會有一種走法,就是從左到右或者從上到下的累加,所以可以先進行初始化,然後其他元素就可以用過轉移方程乙個乙個填充,知道把整個dp矩陣填充完畢.
如果用二維陣列,對於m行n列的陣列,空間複雜度就是o(m*n).動態規劃中常用的優化方法之一就是僅使用乙個一維陣列在進行這個迭代過程.但是這種空間壓縮也有侷限性,那就是不能記錄獲得最後結果的路徑.如果需要完整路徑的話還是需要二維的動態規劃表.
#include #includeusing
namespace
std;
//使用二維陣列的方式
int minpathsum1(int arr[4][4], int m, int
n)
//print array
//for (int i = 0; i < 4; i ++)
return dp[m - 1][n - 1];}
//使用一維陣列的方式
int minpathsum2(int arr[4][4], int m, int
n) }
}//print dp array
//for (int k = 0; k < n; k ++)
//coutcoutintmain()
,,,};
for (int i = 0; i < 4; i ++)
cout
<4, 4)
}
矩陣的最小路徑和 DP
從本文開始,我打算多刷一些動態規劃的題。不僅如此,各種典型演算法也會在分類刷一刷。題目 給定乙個矩陣,從左上角開始每次只能向右或者右下走,最後到達右下角的位置,路徑上所有數字累加起來就是路徑和,返回所有路徑中最小的路徑和。舉例 如果給定的m如下 1,3,5,9 8,1,3,4 5,0,6,1 8,8...
DP題解 矩陣最小路徑和問題
dp題解 矩陣最小路徑和問題 題目 給定乙個矩陣,例如demo,從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的數字累加起來就是路徑和,返回所有的路徑和中最小的路徑和。演算法分析 這是乙個典型的動態規劃演算法問題。分析如下 例如下圖中的矩陣demo,1 3 1 0 6 1 0 ...
矩陣的最小路徑和
準備校招的!這些是一本書的筆記 程式設計師 面試指南 it名企演算法與資料結構題目最優解 左程雲 給定乙個矩陣m,從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的數字累加起來就是路徑和,返回所有的路徑中最小的路徑和 舉例 如果給定的m如下 135 9 813 4 506 1 8...