經典DP 數字三角形

2021-08-06 00:22:57 字數 1227 閱讀 6055

【題目描述】

【輸入】

第一行乙個整數n(<=1000),表示三角形總共有幾行 第二至第n+1行,給出這個數字三角形。

【輸出】

乙個整數,表示一路上所有數的最大和,結果不會超過int64。

【樣例輸入】

4 1

3 2

4 10 1

4 3 2 20

【樣例輸出】

24【分析】

我們可以定義f[i][j]表示走到第i行第j列的時候所取得的最大值,顯然這條路線只能從i-1行的j列或者第i-1行的j+1列推過來。

於是一切都變得清晰起來。

轉移方程很好寫:f[i][j]=max(f[i-1][j],f[i-1][j+1])

此題可用滾動陣列優化

【**】

#include 

#include

const

int maxn = 1005;

int n, ans, f[2][maxn];

inline

int read()

int main()

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

if (ans < f[n & 1][i]) ans = f[n & 1][i];

printf("%d\n",ans);

return

0;}

還有另一種方法

就是倒推,f[i][j]表示從底層出發,走到第i行j列能取到的最大值。

【**】

#include 

#define ll long long

using

namespace

std;

const

int maxn = 1005;

int n; ll a[maxn][maxn], f[2][maxn];

inline

int read()

int main()

以上就是解決此題的兩種方法by : xay5421

date : 2017.08.10

數字三角形 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行,每行包含若干整數,...