9 1數字三角形

2021-07-26 22:31:24 字數 666 閱讀 5454

9.1.1問題描述與狀態定義

回溯法過於麻煩,為了得到高效的演算法,需要用抽象的方法思考問題:把當前的位置(i,j)看出乙個狀態,然後定義狀態(i,j)的指標函式d(i,j)為從格仔(i,j)發出時能得到的最大和(包括格仔(i,j)本身的值)。在這個狀態定義下,原問題的解是d(1,1)

狀態轉移方程

d(i,j)=a(i,j)+max

9.1.2記憶化搜尋與遞迴

方法一:遞迴計算

int solve(int i,int j)
這樣做雖然正確,可是時間效率低,在於重複計算,同樣的子問題倍計算了很多次

方法二:遞推計算

int i,j;

for(j=1;j<=n;j++) d[n][j]=a[n][j];

for(i=n-1;i>=1;i--)

for(j=1;j<=i;j++)

d[i][j]=a[i][j]+max(d[i+1][j],d[i+1][j+1]);

時間複雜度為 n*n;

方法3:記憶化搜尋

程式分成兩個部分,首先用「memset(d,-1,sizeof(d));」 把d全部初始化為-1,然後編寫遞迴函式

int solve(int i,j)

數字三角形

題目描述 示出了乙個數字三角形。請編乙個程式計算從頂至底的某處的一條路 徑,使該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 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 ...