方格取數 數字三角形模型

2021-10-11 22:01:13 字數 1047 閱讀 7436

設有 n×n 的方格圖,我們在其中的某些方格中填入正整數,而其它的方格中則放入數字0。如下圖所示:

某人從圖中的左上角 a 出發,可以向下行走,也可以向右行走,直到到達右下角的 b 點。

在走過的路上,他可以取走方格中的數(取走後的方格中將變為數字0)。

此人從 a 點到 b 點共走了兩次,試找出兩條這樣的路徑,使得取得的數字和為最大。

輸入格式

第一行為乙個整數n,表示 n×n 的方格圖。

接下來的每行有三個整數,第乙個為行號數,第二個為列號數,第三個為在該行、該列上所放的數。

行和列編號從 1 開始。

一行「0 0 0」表示結束。

輸出格式

輸出乙個整數,表示兩條路徑上取得的最大的和。

資料範圍

n≤10

輸入樣例:

82 3 13

2 6 6

3 5 7

4 4 14

5 2 21

5 6 4

6 3 15

7 2 14

0 0 0

輸出樣例:

67解析:可以把問題考慮成兩個人都從起點出發走到終點的最大值

f[i1][j1][i2][j2]表示走到(i1, j1),(i2.j2)的最大值,可以優化成三維的

f[k][i][j] 表示同時走了k步到(i1, k - i1),(i2, k - i2)的最大值;

在轉移之前需要判斷i1是否等於i2如果相等的話就只能加一次該點的權重

**:

#include

#include

#include

using namespace std;

const int n = 15;

int f[n * 2]

[n][n]

;int a[n]

[n];

int main()}

}

cout << f[n * 2]

[n][n]

<< endl;

return 0;

}

數字三角形模型

y式dp 集合角度 集合劃分 i,j 一定是從 i 1,j i,j 1 兩步中轉移而來 轉移方程 時間複雜度 o n 2 for int i 1 i n i for int j 1 j n j f i j max f i 1 j f i j 1 w i j 優化 從轉移方程來看,我們每次只用到了本層...

數字三角形

題目描述 示出了乙個數字三角形。請編乙個程式計算從頂至底的某處的一條路 徑,使該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 1 三角形行數 25 三角形中的數字為整數 1000 輸入第一行為n,表示有n行 後面n行表示三角形每條路的路徑權 輸出路徑所經過的數字的總和最大的答案 樣...

數字三角形

description 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?input 輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n 1 n 100 表示數塔的高度,接下來用n行數字表示數塔,其中第i行有個i個整數,...