動態規劃----數塔問題
阿新 • • 發佈:2018-03-25
pan 問題分析 gpo IT std 邊界值 分享 技術 ++
一、問題描述
從數塔頂層出發,每個結點可以選擇向左走或向右走,要求一直走到塔底,使得走過的路徑上的數值和最大。
如上圖所示的數塔,最大路徑和為86,經過的路徑從塔頂到塔底為13,8,26,15,24。
二、問題分析
要求的最大值可以從地形開始也可以從上面開始
動態規劃函數為:
resultTower[i][j] = tower[i][j] + Math.max(tower[i + 1][j],tower[i + 1][j + 1]);
邊界值resultTower[heigh - 1][j] = tower[heigh - 1][j];
/* Author::若塵 */ #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int dp[1002][1002]; int main() { int t; scanf("%d", &t); int count = 1; while (t--) { memset(dp, 0, sizeof(dp)); int n, m; scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) { scanf("%d", &dp[i][j]); } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { dp[i][j] += max(dp[i-1][j], dp[i][j-1]); } } printf("Scenario #%d:\n", count++); printf("%d\n\n", dp[n][m]); } }
動態規劃----數塔問題