動態規劃 數字三角形

2021-08-22 17:54:51 字數 2045 閱讀 4187

給定乙個數字三角形,找到從頂部到底部的最小路徑和。每一步可以移動到下面一行的相鄰數字上。

比如,給出下列數字三角形:

[

[2],

[3,4],

[6,5,7],

[4,1,8,3]

]

從頂到底部的最小路徑和為11 ( 2 + 3 + 5 + 1 = 11)。

如果你只用額外空間複雜度o(n)的條件下完成可以獲得加分,其中n是數字三角形的總行數。

解題思路:這個題目跟那個數塔的問題非常相似的,數塔求的是最長路徑,而這個問題求的是最短路徑。一樣的分析,從底向上分析,就每次選取兩個子節點中較小的那個。最後頂層的那個節點就是所求的值。

**:

public class solution 

if (********[0] == null || ********[0].length == 0)

int len = ********.length;

for(int i=len-2;i>=0;i--)

}return ********[0][0];

}}

其他解題方法:

// version 0: top-down

public class solution

if (********[0] == null || ********[0].length == 0)

// state: f[x][y] = minimum path value from 0,0 to x,y

int n = ********.length;

int f = new int[n][n];

// initialize

f[0][0] = ********[0][0];

for (int i = 1; i < n; i++)

// top down

for (int i = 1; i < n; i++)

}// answer

int best = f[n - 1][0];

for (int i = 1; i < n; i++)

return best;

}}//version 1: bottom-up

public class solution

if (********[0] == null || ********[0].length == 0)

// state: f[x][y] = minimum path value from x,y to bottom

int n = ********.length;

int f = new int[n][n];

// initialize

for (int i = 0; i < n; i++)

// bottom up

for (int i = n - 2; i >= 0; i--)

}// answer

return f[0][0];

}}//version 2 : memorize search

public class solution

if (minsum[x][y] != integer.max_value)

minsum[x][y] = math.min(search(x + 1, y), search(x + 1, y + 1))

+ ********[x][y];

return minsum[x][y];

}public int minimumtotal(int ********)

if (********[0] == null || ********[0].length == 0)

this.n = ********.length;

this.******** = ********;

this.minsum = new int[n][n];

for (int i = 0; i < n; i++)

}return search(0, 0);

}}

動態規劃 數字三角形

如圖所示的數字三角形,從頂部出發,在每一結點可以選擇向左走或得向右走,一直走到底層,要求找出一條路徑,使路徑上的值最大。第一行是數塔層數n 1 n 100 第二行起,按數塔圖形,有乙個或多個的整數,表示該層節點的值,共有n行。輸出最大值。5 1311 8 12 7 26 6 14 15 8 12 7...

動態規劃 數字三角形

7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的數字三角形中尋找一條從頂部到底邊的路徑,使得 路徑上所經過的數字之和最大。路徑上的每一步都只能往左下或 右下走。只需要求出這個最大和即可,不必給出具體路徑。三角形的行數大於1小於等於100,數字為 0 99 5 三角形行數。下面是三...

動態規劃 數字三角形

在用動態規劃解題時,我們往往將和子問題相關的各個變數的一組取值,稱之為乙個 狀態 乙個 狀態 對應於乙個或多個子問題,所謂某個 狀態 下的 值 就是這個 狀態 所對應的子問題的解。以 數字三角形 為例,初始狀態就是底邊數字,值就是底邊數字值。定義出什麼是 狀態 以及在該 狀態 下的 值 後,就要找出...