動態規劃 Lintcode 109 數字三角形

2021-10-19 19:54:16 字數 1655 閱讀 9183

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

本題可以作為動態規劃的題目入門。為了深刻理解,這裡使用3種方法實現:

記憶化搜尋(divide conquer + memorize)

動態規劃(自底向上)

動態規劃(自頂向下)

// 1. 記憶化搜尋(divide conquer + memorize)

class

solution

int rows = ********.

size()

;//行數

int lastrow_cols = ********[rows -1]

.size()

;//最後一行的列數

vector

int>

>

hash

(rows, vector<

int>

(lastrow_cols, int_max));

return

dfs(********,0,

0, hash);}

intdfs

(vector

int>

>

&********,

int x,

int y, vector

int>

>

&hash)

if(int_max != hash[x]

[y])

int left =

dfs(********, x +

1, y, hash)

;int right =

dfs(********, x +

1, y +

1, hash)

; hash[x]

[y]=

min(left, right)

+ ********[x]

[y];

return hash[x]

[y];}}

;// 2. 動態規劃(自底向上)

class

solution

//中間結果計算

for(

int j = n-

2; j >=0;

--j)

}return f[0]

[0];

}};// 3. 動態規劃(自頂向下)

class

solution

if(********[i]

.size()

-1== j)

//正常情況

f[i]

.push_back

(min

(f[i -1]

[j -1]

, f[i -1]

[j])

+ ********[i]

[j]);}

}auto minsum =

min_element

(f[n-1]

.begin()

, f[n-1]

.end()

);return

*minsum;}}

;

Lintcode 109 數學三角形

給定乙個數字三角形,找到從頂部到底部的最小路徑和。每一步可以移動到下面一行的相鄰數字上。注意事項 如果你只用額外空間複雜度o n 的條件下完成可以獲得加分,其中n是數字三角形的總行數。分析 如果從上往下進行計算,會發現越是接近底層的子問題被重複計算的次數越多,為了避免重複的計算,使計算更加簡潔。所以...

lintcode 20 骰子求和 動態規劃

扔 n 個骰子,向上面的數字之和為 s。給定 given n,請列出所有可能的 s 值及其相應的概率。注意事項 you do not care about the accuracy of the result,we will help you to output results.您在真實的面試中是否...

LintCode 91 最小調整代價(動態規劃)

題目 dp i j 表示調整到第i個數時,此時,第i個數取值為j,為代價和最小。顯然dp i 1 k 已知,則調整的總代價為dp i j dp i 1 k abs j a i 由於j和k有多種取值可能,所以迴圈求解判斷,k表示前乙個數,j表示現在的數,假設j確定,那麼k的取值就是在乙個範圍內,因為差...