1. 程式人生 > 其它 >矩陣最小路徑和 動態規劃

矩陣最小路徑和 動態規劃

Description

 給定一個m行n列的矩陣,從左上角開始每次只能向右或者向下移動,最後到達右下角的位置,路徑上的所有數字累加起來作為這條路徑的路徑和。編寫一個實驗程式求所有路徑和中的最小路徑和。例如,以下矩陣中的路徑1->3->1->0->6->1->0是所有路徑中路徑和最小的,返回結果是12:

 

1  3  5  9
8  1  3  4
5  0  6  1
8  8  4  0

  

#include <iostream>
#include<algorithm> 
#include<math.h> 
#include 
<map> using namespace std; int main() { int m,n; cin>>m>>n; int a[m][n]; int dp[m][n]; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ cin>>a[i][j]; } } dp[0][0]=a[0][0]; for(int i=1;i<m;i++){//第一列 dp[i][0
]=dp[i-1][0]+a[i][0]; } for(int j=1;j<n;j++){//第一行 dp[0][j]=dp[0][j-1]+a[0][j]; } for(int i=1;i<m;i++){ for(int j=1;j<n;j++){ if(dp[i-1][j]>dp[i][j-1]){ dp[i][j]=dp[i][j-1]+a[i][j]; }else{ dp[i][j]=dp[i-1][j]+a[i][j]; } } } cout
<<dp[m-1][n-1]; return 0; }