有以下一個數字三角形:
java
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5算法
從定點出發,在每一個節點能夠選擇向左走或者向右走,一直走到底層。試設計一種算法,計算從三角形頂端到底部的一條路徑,是該路徑通過的數字總和最大。ide
分析:這是一個動態規劃問題,動態規劃的思想就是在求解的過程當中用到子問題,保存子問題的解,用空間換時間。spa
狀態轉移方程:tri[i][j]=tri[i][j]+max{tri[i+1][j],tri[i+1][j+1]};設計
其中i=n-2,n-3,...0,0<=j<=i;it
代碼實現:class
public class DynamicProgram { //數字三角形問題 private static final int NUM =100; /** * tri爲數字三角形矩陣 * n爲數字三角形的層 * */ public int numbertri(int[][] tri,int n){ int i ,j; for(i= n-2;i>=0;i--){ for(j=0;j<=i;j++){ if(tri[i+1][j]>tri[i+1][j+1]){ tri[i][j] += tri[i+1][j]; }else tri[i][j] +=tri[i+1][j+1]; } } return tri[0][0]; } }
沒有實現的問題:求出最優解路徑,這是今天接下來的工做static