hdu 2084 數塔 解題報告

2022-06-10 17:51:13 字數 1323 閱讀 9696

經典的dp入門題。

最近學起dp,做回這道題目,用的是自頂向上的方法來求解,發現**很長,不過時間短了,這應該就是傳說中的「以空間換時間」的說法吧。個人覺得,這比較符合人的思考模式,不過真的很繁瑣,由於不知道最後一行中最大和的具體位置,還要比較找出。

狀態轉移方程是(設f(i, j)為三角形上從點(i,j)出發向下走的最大和路徑, a(i, j)表示原始輸入的第 i 行第 j 列的數 :

f(i, j) = a(i, j) + max      i != j  (每行裡除第一和最後的處於中間位置的數

a(i, j)+ f(i-1, j)                               j = 0   (每行裡的第乙個數)

a(i, j) + f(i-1, j-1)                             j = i   (每行裡的最後乙個數)

1 #include 2

using

namespace

std;34

intmain()517

for (i = 1; i < n; i++)

1825

else

if (i == j) //

每行的最後乙個數只能從它的左上一行+當前行的數

26 a[i][j] = a[i-1][j-1] +a[i][j];

27else

2834}35

}36 maxsum = -100;37

for (j = 0; j <= n-1; j++)

38if (maxsum < a[n-1

][j])

39 maxsum = a[n-1

][j];

40 printf("

%d\n

", maxsum); 41}

42}43return0;

44 }

自底向上的求法:

(連特殊位置的判斷都不用考慮了,而且保證最後輸出的a[0][0]一定是最大的)

1 #include 2

using

namespace

std;34

intmain()517

for (i = n - 2; i >= 0; i--)

1826

}27 printf("

%d\n

", a[0][0

]); 28}

29}30return0;

31 }

Hdu 2084 數塔 簡單

hdu 2084 題目描述 在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?已經告訴你了,這是個dp的題目,你能ac嗎?input 輸入資料首先包括乙個整數c,表示測試例項的個數,...

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...

hdu 2084 數塔(動態規劃)

problem description 在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?已經告訴你了,這是個dp的題目,你能ac嗎?輸入資料首先包括乙個整數c,表示測試例項的個數,...