HDOJ 2084 數塔 解題報告

2021-06-04 05:07:51 字數 497 閱讀 9170

要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?

初始條件其實就是最底層的數值,遞推關係是某一節點數值=自身數值+左右子節點數值的較大值。

看到有的人的**是用二維陣列,角標1為行號角標2為該行第幾個元素,這樣確實**更好寫,不過浪費了一倍的記憶體,我是用一位陣列寫的,每行第乙個元素的序號需要求一下,略顯麻煩。

//hdoj_2084:數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?

#include using namespace std;

int main()

cout << b[1] << endl;

}return 0;

}

如果需要輸出路徑,可以通過陣列c記錄每個點選擇的是其左孩子[=0]還是右孩子[=1],即
for( k=1; k<=j; k++ ) else 

}

HDOJ2084數塔問題

problem description在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的 o o 圖貌似沒有複製上,不想傳了,一搜hdoj2084就都知道了 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?已經告訴你了,這是個dp的...

HDOJ2084數塔問題

數塔問題 題目要求從頂層走到底層,若每一步只能走到相鄰的結點,求經過的結點的數字之和最大值。很經典的dp,可以這樣考慮,要求從塔頂到塔底最大路徑之和,計算時可以考慮自底向上,走最後一步所選的數一定是塔底的某個值,向上退一層,對於倒數第二步,所走的是塔底往上一層較大的那個數,此時可以將倒數第二步所走的...

動態規劃 數塔問題(HDOJ 2084)

動態規劃 dynamic programming 網上大家都簡稱為dp。dp的核心思想就是找出各階段各子問題之間的關係,然後利用各階段的關係逐個求解。其中比較經典的題目就是數塔和最長有序子串行的求解。數塔 題目 有形如下面所示的數塔,從頂部出發,在每一節點可以選擇向左走或是向右走,一直走到底層,需求...