記憶化搜尋入門 數塔

2021-07-31 02:05:30 字數 1045 閱讀 8869

time limit: 1000ms

memory limit: 65536kb          

submit

statistic

discuss

problem description

給定乙個由n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大。

對於給定的由n行數字組成的數字三角形,計算從三角形的頂至底的路徑經過的數字和的最大值。

input

輸入資料的第1行是數字三角形的行數n,1≤n≤100。接下來n行是數字三角形各行中的數字。所有數字在0..99之間。

output

輸出資料只有乙個整數,表示計算出的最大值。

example input

5

73 8

8 1 0

2 7 4 4

4 5 2 6 5

example output

30
分析:直接搜尋的話我們每次都會進行很多次多餘的操作,所以我們不妨把每次搜尋的結果記錄下來,這樣就避免了大量的重複計算,節約時間。每次的結果只和上次的狀態有關,這樣的時候就可以考慮記憶化搜尋,也就是動態規劃。
#include using namespace std;

int n;

int mp[105][105];

int dp[105][105];

int ans;

int dfs(int s,int e)

if(s>n || e>n) return 0;

dp[s][e]=max(dfs(s+1,e),dfs(s+1,e+1))+mp[s][e];

return dp[s][e];

}int main()

cout<

數塔 (論遞迴 搜尋 記憶化搜尋 動態規劃)

題目如下 在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?已經告訴你了,這是個dp的題目,你能ac嗎?input 輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一...

數塔 (論遞迴 搜尋 記憶化搜尋 動態規劃)

題目如下 在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?已經告訴你了,這是個dp的題目,你能ac嗎?input 輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一...

A 數塔 (遞迴 記憶化陣列 DP)

在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?已經告訴你了,這是個dp的題目,你能ac嗎?輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n 1 n...