POJ 1163 The Triangle 問題解析與程式碼 解法一
阿新 • • 發佈:2019-01-12
1.問題分析
原題連結:http://poj.org/problem?id=1163
本題可以抽象為求最大路徑,但這種解法屬於較大複雜度的解法,放在後續的解法二中進行講解。解法一進行進一步簡化,從底部向上進行計算,如下圖所示:
當從下向上進行考慮時,有公式:
由於每一步都相當於是一次逆向的遞迴,所以可以保證單步的最大值求解一定是全域性的最大值求解。
2.程式碼
#include <iostream> using namespace std; int main() { int matrix[101][101];//定義一個二維矩陣 int Nline;//輸入行總數 cin >> Nline; for (int i = 1; i <= Nline; i++)//當前輸入第i行 { for (int j = 1; j <= i; j++)//第i行總共又i個數 { cin >> matrix[i][j]; } } //從下向上計算,最後matrix[1][1]中存放的就是計算結果 for (int i = Nline-1; i > 0; i--) { for (int j = 1; j <= i; j++) { matrix[i][j] = (matrix[i][j] + matrix[i + 1][j] > matrix[i][j] + matrix[i + 1][j + 1]) ? (matrix[i][j] + matrix[i + 1][j]) : (matrix[i][j] + matrix[i + 1][j + 1]); } } cout << matrix[1][1]; return 0; }