給定乙個由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行數字組成的數字三角形,計算從三角形的頂至底的路徑經過的數字和的最大...