1. 程式人生 > 其它 >Problem:數字三角形

Problem:數字三角形

技術標籤:演算法c++

題目描述

給定一個如下圖所示的數字三角形,從頂部出發,在每一結點可以選擇移動至其左下方的結點或移動至其右下方的結點,一直走到底層,要求找出一條路徑,使路徑上的數字的和最大。
在這裡插入圖片描述

輸入格式

第一行包含整數n,表示數字三角形的層數。
接下來n行,每行包含若干整數,其中第 i 行表示數字三角形第 i 層包含的整數。

輸出格式

輸出一個整數,表示最大的路徑數字和。

資料範圍

1 ≤ n ≤ 500,
−10000 ≤ 三角形中的整數 ≤ 10000

輸入樣例

在這裡插入圖片描述

輸出樣例

在這裡插入圖片描述

思路

DP演算法

程式程式碼

#include <iostream>
#include <cstring>
#include <algorithm> using namespace std; int main() { int n; cin >> n; int w[n + 1][n + 1]; for(int i = 1; i <= n; ++i) for(int j = 1; j <= i; ++j) cin >> w[i][j]; for(int i = n - 1; i ; i--) for(int j = 1; j <= i; j++
) w[i][j] += max(w[i + 1][j], w[i + 1][j + 1]); cout << w[1][1]; return 0; }

DP演算法詳解

  • 若有問題,歡迎交流