演算法十六 數字三角形

2021-08-21 04:38:39 字數 1264 閱讀 4267

時間限制: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 ...