1. 題目描述
給定乙個如下圖所示的數字三角形,從頂部出發,在每一結點可以選擇移動至其左下方的結點或移動至其右下方的結點,一直走到底層,要求找出一條路徑,使路徑上的數字的和最大。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
輸入格式
第一行包含整數n,表示數字三角形的層數。
接下來n行,每行包含若干整數,其中第 i 行表示數字三角形第 i 層包含的整數。
輸出格式
輸出乙個整數,表示最大的路徑數字和。
資料範圍
1 ≤n
≤500
1≤n≤500
1≤n≤50
0,−
10000≤三
角形中的
整數
≤10000
−10000 ≤ 三角形中的整數≤10000
−10000
≤三角形
中的整數
≤100
00輸入樣例:
5
73 8
8 1 0
2 7 4 4
4 5 2 6 5
輸出樣例:
30
2. 解題思路
首先,對於題目中的任意一點,都有很多種走法。說明,這個題目中,每個結點對應的路徑值都會包含能走到該結點的前乙個結點路徑值,即從(1,
1)→(
i,j)
(1,1) \rightarrow (i,j)
(1,1)→
(i,j
)一定包含(1,
1)→(
i−1,
j)
(1,1) \rightarrow (i - 1, j)
(1,1)→
(i−1
,j),所以在計算時,如果使用暴力破解的方法,會使本題的複雜度變成指數級,所以使用動態規劃演算法可以降低時間複雜度。
d
p狀態表示 f(i,j) \begin 集合:所有從(1, 1)走到(i, j)走法的集合 \\ \\ 屬性:max (路徑上權值的最大值) \end\\ \\ 狀態計算: 對於(i, j)可以從(i - 1, j)和(i - 1, j - 1)轉移過來,\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 即(1, 1) \rightarrow (i - 1, j) \rightarrow (i, j), 前一步部分正好表示的是f(i - 1, j), \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 同理(i - 1, j - 1)這個點可以表示為f(i - 1, j - 1)。\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 兩者取乙個max,再加上w(i, j)的值即可得到f(i, j)的結果。 \end
dp⎩⎪⎪⎪
⎪⎪⎪⎪
⎪⎪⎪⎪
⎪⎪⎨⎪
⎪⎪⎪⎪
⎪⎪⎪⎪
⎪⎪⎪⎪
⎧狀態
表示f(
i,j)
⎩⎪⎨⎪
⎧集合
:所有從
(1,1
)走到(
i,j)
走法的集
合屬性:
max(
路徑上權
值的最大
值)狀
態計算:
對於(i
,j)可
以從(i
−1,j
)和(i
−1,j
−1)轉
移過來,
即(1,
1)→(
i−1,
j)→(
i,j)
,前一步
部分正好
表示的是
f(i−
1,j)
,同理(
i−1,
j−1)
這個點可
以表示為
f(i−
1,j−
1)。兩
者取乙個
max,
再加上w
(i,j
)的值即
可得到f
(i,j
)的結果
。最後答案是max1
≤i≤n
\max_\
max1≤i
≤n
3. **實現
#include #include #include using namespace std;
const int n = 510;
int n;
int w[n][n];
int f[n][n];
int main()
4. 注意事項
初始化因為,本題狀態更新時,在第一列會出現非法狀態向合法狀態轉移的情況,所以要注意陣列的初始化。由於本題有負數,所以只需要將陣列中所有元素初始化成負無窮即可(也可以單獨初始化)。
一定注意在求res
這個結果時,要初始化成負無窮,否則無法求出正確的值。
acwing 898 數字三角形
給定乙個如下圖所示的數字三角形,從頂部出發,在每一結點可以選擇移動至其左下方的結點或移動至其右下方的結點,一直走到底層,要求找出一條路徑,使路徑上的數字的和最大。7 3 8 8 1 0 2 7 4 4 4 5 2 6 5輸入格式 第一行包含整數 n,表示數字三角形的層數。接下來 n 行,每行包含若干...
acwing 898數字三角形(區間dp)
給定乙個如下圖所示的數字三角形,從頂部出發,在每一結點可以選擇移動至其左下方的結點或移動至其右下方的結點,一直走到底層,要求找出一條路徑,使路徑上的數字的和最大。7 3 8 8 1 0 2 7 4 4 4 5 2 6 5輸入格式 第一行包含整數n,表示數字三角形的層數。接下來n行,每行包含若干整數,...
Day3 開啟 acwing 898 數字三角形
題目 給定乙個如下圖所示的數字三角形,從頂部出發,在每一結點可以選擇移動至其左下方的結點或移動至其右下方的結點,一直走到底層,要求找出一條路徑,使路徑上的數字的和最大。7 3 8 8 1 0 2 7 4 4 4 5 2 6 5輸入格式 第一行包含整數n,表示數字三角形的層數。接下來n行,每行包含若干...