(動態規劃)數字三角形問題

有以下一個數字三角形:
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

相關文章
相關標籤/搜索