1. 問題描述
有乙個像這樣的數字三角形: 7
3 88 1 0
2 7 4 4
4 5 2 6 5
從頂點開始,每個數字向下層走只能有左下和右下兩個方向,求出到達最後一行時最大的路徑之和.
input
第1 行是數字三角形的行數n,1<= n <=100。
接下來n行是數字三角形各行中的數字。所有數字在0---99之間。
比如input是:57
3 88 1 0
2 7 4 4
4 5 2 6 5
則output是30
2. 問題求解
這是乙個典型的動態規劃求解問題。
**如下:
#include using namespace std;
int getmax(int m, int n)
int main()
; int n = 0;
cin >> n;
for(int i=0; i> road[i][j];
} }int dist[100][100] = ;
dist[0][0] = road[0][0];
for(int i=1; imaxsum) maxsum = dist[n-1][i];
} cout << maxsum << endl;
return 0;
}
動態規劃的思想就是在求解的過程中要用到子問題,需要儲存子問題的解,用空間換時間。
數字三角形求解
題目 如圖所示,32 3 4 3 4 4 7個數字構成三層的數字三角形,從屬關係為樹形關係。要求按照從屬關係,在每一層選擇乙個數,使最後的和最大。分析 如果從下往下選擇的話,越往下選擇越多,問題就越複雜。考慮從下往上選擇,採用動態規劃法,從區域性開始考慮。區域性最大,則構成整體最大。我是用c 寫的。...
數字三角形問題
數字三角形問題 標籤 動態規劃 雜談分類 演算法設計 34 5 11 9 8 15 21 13 4 這是乙個數字三角形。請編乙個程式計算從頂至底的某處的一條路徑,使該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 1 三角形行數 200 三角形中的數字為整數0,1,99 輸入格式 第...
數字三角形問題
給定乙個由n行數字組成的數字三角形,設計乙個演算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大。0,0 1,0 1,1 2,0 2,1 2,2 3,0 3,1 3,2 3,3 思路 動態規劃 動態方程 sum i,j a i,j max sum i,j 表示從 i,j 出發時能得到...