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
5example output73 8
8 1 0
2 7 4 4
4 5 2 6 5
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...