這個是動態規劃入門題,比較簡單。
題意是:
乙個數字組成的三角形,從上到下找一條路徑,使這條路徑上數字之和最大。
解題思路,就是要從下往上看。舉個例子:
如果你從上到下走到了第4行第1個數,也就是2,那麼接下來有兩個數可以走19和7,而你必然會選擇19。
所以就可以根據這個思路更新上面一行的數。把2更新成2+19=21。18更新成18+10=28,9更新成9+10=19,5更新成5+16=21
重複上面的思路最後第一行累加出來的就是最大值了。
思路很簡單,最簡單的實現就是你也開乙個二維陣列去儲存動歸過程的值。但是空間有優化的餘地,就是不新開陣列,使用原陣列的最後一行來儲存資料,因為我們每次只需要一行的資料,只要把累加的情況一直作用在最後一行上,就行了。那麼最後一行的第乙個數就是最大值。
#include int main()
printf("%d\n",num[n-1][0]);
} return 0;
}
HDU2084 數塔 動態規劃入門 遞推
題目思路 從上往下狀態太多不好處理,那麼我們就從下往上遞推,每一層少乙個狀態。設乙個一維陣列dp 初始狀態存最下面的那一行 即 第五行dp 1 4,dp 2 5,dp 3 2,dp 4 6,dp 5 5 往上遞推一層 轉移方程為 dp j max dp j dp j 1 a i j 那麼對於第4行 ...
HDU 2084 數塔問題(動態規劃入門)
description 在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?已經告訴你了,這是個dp的題目,你能ac嗎?input 輸入資料首先包括乙個整數c,表示測試例項的個數,每個...
hdu 2084 數塔(動態規劃)
problem description 在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?已經告訴你了,這是個dp的題目,你能ac嗎?輸入資料首先包括乙個整數c,表示測試例項的個數,...