題目鏈結
這是乙個基礎的dp問題,我們要想知道第乙個結點往下走的時候是往左走還是往右走,就要判斷是從左結點走經過的結點數字總數較大還是往右結點走經過的結點數字總數較大,而對於左結點,是往左結點走經過的結點數字總數較大還是往右結點走經過的結點數字總數較大,對於左結點的左結點…***,這個時候就開始迴圈了。
就這樣一直迴圈到倒數第二層,對於這個結點,是往左節點走好還是往右節點走好,那好辦啊,直接比較這個結點的左孩子大還是又孩子大不就結了,把大的孩子數字直接加到這個節點上就得到經過這個結點的最大結點數字總數了,哈哈,這樣就好辦了,我們就可以逐層求上面的各個節點的最大結點總數了,一直到第一層a[1][1]的值就是經過的結點的數字之和最大是多少。
儲存這個數塔我們使用二位陣列,而對於任意乙個結點,左孩子是dp[i+1][j]或者dp[i+1][j+1],這是我們就要判斷它的經過它左孩子得到的最大結點數更大還是右孩子經過的最大結點數更大一點。必須從倒數第二層到第一層逐層判斷,這樣才能保證孩子中儲存的是經過它的最大結點數總數,而不是它自己的結點數。
陣列的一層更新完這層儲存的數字就是經過該結點的最大結點總數。
#include
using
namespace std;
int q[
105]
[105];
intmain()
for(
int i=n-
1;i>
0;i--)}
cout<
[1]<
}return0;
}
HDU2084數塔(DP入門)
解題思路 動態規劃,注意暴力搜尋會tle ac 如下 include include include include include include include include include include include includeusing namespace std 狀態 dp i ...
HDU 2084 數塔(簡單DP)
hdu 2084 數塔 題意 自上而下,選擇一條累計和最大的路徑 分析 頂點只與左右兩個子節點相關,且子節點路徑的選擇與頂點無關 無後效性 狀態dp i j 表示 i,j 點向下得到的最大累計和 轉移方程 dp i j max dp i 1 j dp i 1 j 1 v i j 核心 for i n...
HDU2084 數塔(經典dp)
problem description 在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?已經告訴你了,這是個dp的題目,你能ac嗎?input 輸入資料首先包括乙個整數c,表示測試...