動態規劃(入門級) 數塔

2021-08-25 14:41:49 字數 693 閱讀 8239

在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?

已經告訴你了,這是個dp的題目,你能ac嗎?

輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n(1 <= n <= 100),表示數塔的高度,接下來用n行數字表示數塔,其中第i行有個i個整數,且所有的整數均在區間[0,99]內。

對於每個測試例項,輸出可能得到的最大和,每個例項的輸出佔一行。

157

3 88 1 0

2 7 4 4

4 5 2 6 5

30
數塔倒數第二層開始,max(dp[i+1],dp[i+1][j+1] )就是下一層的最優解,用dp[i][j]儲存,每一步的最優解,從下往上遞推,dp[0][0]一定是最大的。

#include using namespace std;

#define l 100

int main()

cout<

}return 0;

}

動態規劃入門 數塔問題

數塔問題 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?這是乙個dp問題 input輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n 1 n 100 表示數塔的高度,接下來用n行數字表示數塔,其中第i行有個i個整數...

數塔問題 動態規劃入門

輸入一組數塔,求解怎樣使總數和最大 從最底層的各位置dp值開始,不斷往上求出每一層各位置的dp值,最後就會得到dp 1 1 即為想要的答案。遞推寫法的計算方式是自底向上,即從邊界開始,不斷向上解決問題,直到解決了目標問題 而使用遞迴寫法的計算方式是自頂向下,即從目標問題開始,將它分解成子問題的組合,...

動態規劃入門

1 用 dp 做的題大多數返回值是int boolean,求max min,不能打亂原來輸入順序。2 動態規劃有兩個重要定義,乙個叫 optimal substructure 另乙個叫 overlap subproblem 各種排序 tree 類問題中,都會用到 divide conquer 的思想...