給定乙個矩陣arr,從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有數字累加起來就是路徑和,返回所有路徑中最小路徑和,如果給定的arr如大家看到的樣子,路徑1,3,1,0,6,1,0就是路徑中和最小的,所以返回12。
//矩陣arr
1 3 5 9
8 1 3 4
5 0 6 1
8 8 4 0
生成大小和arr一樣的矩陣dp,dp[i][j]的值表示從左上角,也就是(0,0)位置,走到(i,j)位置的最小路徑和。
dp第一行的值就是arr第一行的值不斷累加的結果。
dp第一列的值就是arr第一列的值不斷累加的結果。
dp[i][j]=arr[i][j]+min(dp[i-1][j],dp[i][j-1])
**如下:
#include#includeusing namespace std;
int arr[4][4]=, ,
, };int minstep(int row,int col,int dp[4])
} return dp[row-1][col-1];
}int main()
; row=4;
col=4;
cout<
動態規劃 矩陣連乘問題
給定n 1個矩陣 a0,a1,a2,an 1 其中ai與ai 1是可乘的,i 0,1,2,n 2。矩陣乘法滿足結合律。考察這n個矩陣的連乘積,得出運算次數最少的結合。首先,考慮兩個矩陣相乘。如果a b兩個矩陣可以相乘,那麼a b的形式必定滿足 a p q b q r 設c a b,那麼c滿足c p ...
動態規劃 矩陣連乘問題
以下只是對此問題的乙個 實現,具體理論部分請參見王曉東 演算法設計與分析 第2 版3.1 節 矩陣連乘問題。include include using namespace std define max count 20 矩陣屬性 struct tagmatrixattribute 矩陣連乘加括號求解...
動態規劃 矩陣連乘問題
建立遞迴關係 設計算a i j 1 i j n,所需的最少數乘次數為m i j 則原問題的最優值為m 1 n 當i j時,a i j ai 為單一矩陣,無需計算,因此m i j 0,i 1,2,n.當i j時,可利用最優子結構性質來計算m i j 若計算a i j 的最優次序在ak和ak 1之間斷開...