數字三角形問題

2021-06-28 12:56:36 字數 816 閱讀 1610

給定乙個由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)出發時能得到的最大和(包括(i,j)本身的值),a(i,j)表示位置(i,j)的值。

動態方程可解釋為:從(i,j)出發有兩種決策。如果往下走,則走到(i+1,j)後需要求「從(i+1,j)出發後所能得到的最大和」這一問題,即sum(i+1,j)。

類似的,往右走之後需要求解sum(i+1,j+1)。由於這兩個決策中自由選擇,所以應選擇d(i+1,j)和d(i+1,j+1)中較大的乙個。

原問題的解即為:d(0,0)

#includeint **a;

int **sum;

int n;

//遞推計算

int func1(int i,int j)

//記憶化搜尋,為了避免遞迴計算的重複計算問題,memset(sum,-1,sizeof(sum))。

int func2(int i,int j)

int main()

{ int i,j;

scanf("%d",&n);//層數

//陣列a,d動態申請空間

a = new int*[n];

for(i=0;i

數字三角形問題

數字三角形問題 標籤 動態規劃 雜談分類 演算法設計 34 5 11 9 8 15 21 13 4 這是乙個數字三角形。請編乙個程式計算從頂至底的某處的一條路徑,使該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 1 三角形行數 200 三角形中的數字為整數0,1,99 輸入格式 第...

數字三角形問題

time limit 1000ms memory limit 65536k 給定乙個由n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大。對於給定的由n行數字組成的數字三角形,計算從三角形的頂至底的路徑經過的數字和的最大值。輸入資料的第...

數字三角形問題

time limit 1000ms memory limit 65536k 有疑問?點這裡 給定乙個由n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大。對於給定的由n行數字組成的數字三角形,計算從三角形的頂至底的路徑經過的數字和的最大...