P1216 [USACO1.5][IOI1994]數字三角形 Number Triangles 題解
阿新 • • 發佈:2022-04-08
題目描述
觀察下面的數字金字塔。
寫一個程式來查詢從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
在上面的樣例中,從 $ 7 \to 3 \to 8 \to 7 \to 5$ 的路徑產生了最大
輸入格式
第一個行一個正整數 rr ,表示行的數目。
後面每行為這個數字金字塔特定行包含的整數。
輸出格式
單獨的一行,包含那個可能得到的最大的和。
解題思路
一道經典的動態規劃題。
從下往上、從右往左進行遍歷,每個位置的權值都是它左下方和右下方數字的最大值。
程式碼:
#include <bits/stdc++.h> using namespace std; short old[1010][1010]; int a[1010][1010]; int main(){ int r; cin>>r; for(int i=1;i<=r;i++){ for(int j=1;j<=i;j++){ cin>>old[i][j]; \\輸入 a[i][j]=old[i][j]; } } for(int i=r;i>=1;i--){ for(int j=i;j>=1;j--){ a[i-1][j]+=max(a[i][j],a[i][j+1]); \\ 當前遍歷位置的上一行增加當前位置和當前位置右面中的最大值 } } cout<<a[1][1]; \\最上面的一格就是最大值 return 0; }