時間限制:2 sec
空間限制:256 mb
給定乙個高度為 n 的「數字三角形」,其中第 i 行(1<=i<=n)有 i 個數。(例子如下圖所示)
初始時,你站在「數字三角形」的頂部,即第一行的唯一乙個數上。每次移動,你可以選擇移動到當前位置正下方或者當前位置右下方的位置上。即如果你在 (i,j)(表示你在第i行從左往右數第j個數上,下同),你可以選擇移動到 (i+1,j) 或 (i+1,j+1)。
你想讓你經過的所有位置(包括起點和終點)的數字總和最大。求這個最大值。
第一行乙個正整數 n,表示數字三角形的大小。
第 2 行到第 n+1 行,第 i+1 行為 i 個用空格隔開的非負整數,描述數字三角形的第 i 行。
一行乙個整數,表示經過路徑上數的最大總和。
2 3
4 5 6
7 8 9 10
不停地向右下走即可。
[如果我們使用搜尋演算法,我們會在搜尋時記錄哪些資訊呢?]
[當前到達的點的座標、當前經過路徑上數的總和!]
[總和顯然是越大越好!]
[於是可以設計出狀態:dp[i][j] 表示走到座標為 (i,j) 的點時的最大總和。]
[很容易就可以設計出狀態轉移方程啦!]
// ***************== **實現開始 ***************==
//dp:用於動態規劃的陣列,d[i][j]表示要走到第i行第j列能得到最大數字總和
vector> dp;
// 本函式計算答案(最大經過位置數字總和)
// n:描述數字三角形大小,意義同題目描述
// a:描述整個數字三角形,第 i 行的第 j 個數存放在 a[i][j]
// 中(你需要特別注意的是,所有下標均從 1 開始,也就是說下標為 0 的位置將存放無效資訊)
// 返回值:最大經過位置數字總和
int getanswer(int n, vector> a)
// ***************== **實現結束 ***************==
數字三角形
題目描述 示出了乙個數字三角形。請編乙個程式計算從頂至底的某處的一條路 徑,使該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 1 三角形行數 25 三角形中的數字為整數 1000 輸入第一行為n,表示有n行 後面n行表示三角形每條路的路徑權 輸出路徑所經過的數字的總和最大的答案 樣...
數字三角形
description 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?input 輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n 1 n 100 表示數塔的高度,接下來用n行數字表示數塔,其中第i行有個i個整數,...
數字三角形
3 8 8 1 0 2 7 4 4 4 5 2 6 5 上圖給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,和最大的路徑稱為最佳路徑。你的任務就是求出最佳路徑上的數字之和。input 1 5 7 3 8 8 1 0 2 7 4 4 4 ...