dp 數字三角形問題

2021-09-28 15:54:35 字數 1427 閱讀 4716

數字三角形問題

time limit: 1000 ms memory limit: 65536 kib

problem description

給定乙個由n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大。

對於給定的由n行數字組成的數字三角形,計算從三角形的頂至底的路徑經過的數字和的最大值。

input

輸入資料的第1行是數字三角形的行數n,1≤n≤100。接下來n行是數字三角形各行中的數字。所有數字在0…99之間。

output

輸出資料只有乙個整數,表示計算出的最大值。

sample input57

3 88 1 0

2 7 4 4

4 5 2 6 5

sample output

30

分析:

dp[i]

[j]姑且稱為問題的狀態

從下往上分析,要想到dp[1]

[1]的和最大

你要考慮兩個子問題:

1,dp[2]

[1]要最大

2,或者dp[2]

[2]要最大

可以發現dp[i]

[j]只與i+

1層有關係

依次往下一層分析即可...

...即得到狀態轉移方程:dp[i]

[j]=

max(dp[i+1]

[j],dp[i+1]

[j+1])

+f[i]

[j]它把狀態dp[i]

[j]轉移為dp[i+1]

[j]+dp[i+1]

[j+1].

最後從最後一層往上計算即得出dp[1]

[1]。

#include

#include

using

namespace std;

const

int max1 =

1000

;int f[max1]

[max1]

,dp[max1]

[max1]

;int

main()

}///邊界

for(

int j =

1;j <= n;j++

)///從n-1層不斷往上走,計算出dp[i][j]

for(

int i = n-

1; i >=

1; i--)}

printf

("%d\n"

,dp[1]

[1])

;return0;

}

數字三角形 DP

數字三角形 時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 問題描述 小hi和小ho在經歷了螃蟹先生的任務之後被獎勵了一次出國旅遊的機會,於是他們來到了大洋彼岸的美國。美國人民的生活非常有意思,經常會有形形色色 奇奇怪怪的活動舉辦,這不,小hi和小ho剛剛下飛機,就趕上了當...

(dp)數字三角形

數字三角形問題。有乙個由非負整數組成的三角形,第一行只有乙個數,除了最下行 之外每個數的左下方和右下方各有乙個數 從第一行的數開始,每次可以往左下或右下走一格,直到走到最下行,把沿途經過的數 全部加起來。如何走才能使得這個和盡量大?具體實現 中的d我們用maxsum表示 最初的位置我們用d存 1.把...

數字三角形 dp

給定乙個如下圖所示的數字三角形,從頂部出發,在每一結點可以選擇移動至其左下方的結點或移動至其右下方的結點,一直走到底層,要求找出一條路徑,使路徑上的數字的和最大。73 8 8 1 0 2 7 4 4 4 5 2 6 5 輸入格式 第一行包含整數n,表示數字三角形的層數。接下來n行,每行包含若干整數,...