演算法 數字三角形(DP)

2021-08-10 17:24:47 字數 1068 閱讀 2093

動態規劃-數字三角形

給定乙個由 n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形 的頂至底的一條路徑(每一步可沿左斜線向下或右斜線向下),使該路徑經過的數字總和最大。

輸入有n+行: 第 1 行是數字三角形的行數 n,1<=n<=100。 接下來 n行是數字三角形各行中的數字。所有數字在0..99 之間。

輸出最大路徑的值。

在這裡給出一組輸入。例如:

5 

7 3 8

8 1 0

2 7 4 4

4 5 2 6 5

在這裡給出相應的輸出。例如:

30
/*

子問題識別符號的含義:

a[i][j]表示由兩個分支路徑之和大值加上本身。

子問題遞迴公式:

a[i][j]=a[i][j] i=n;1<=j<=n

a[i][j] = max(a[i + 1][j],a[i + 1][j + 1]) + a[i][j] n-1>=i>=1,1<=j<=i

原問題最優值:

頂點的最大路徑之和,a[1][1];

*/#includeusing namespace std;

int max(int i, int j)

int shuzi(int **a, int n)

return a[1][1];

}int main()

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

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

cin >> a[i][j];

cout << shuzi(a, n);

system("pause");

}

這是一種自底向上的方法,從倒數第二行開始,每個數的最大路徑都由它的左孩子和右孩子的最大路徑加上本身的較大者決定。

每日演算法 數字三角形

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

數字三角形 DP

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

(dp)數字三角形

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