數字三角形 1

2021-08-31 04:00:22 字數 675 閱讀 7283

不能傻傻的用普通遞迴:會超時,因為有大量的重複計算。

需要改進,每個結果一旦算出來就存起來,下次需要用的時候就直接呼叫。

改進成為記憶遞迴型動歸程式:

# include

# include

using namespcae std;

#define max 101

int d[max][max];

int n;

int maxsum(int i, int j)

if(maxsum[i][j]!=-1)

return maxsum(i,j);

if(i==n)

{  maxsum[i][j]=d[i][j];

else{

int x = maxsum(i+1,j);

int y = maxsum(i+1,j+1)

maxsum[i][j] =  max(x,y)+d[i][j];

return maxsum[i][j];

int main()

int i,j

cin>>n;

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

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

cin>>d[i][j];

maxsum[i][j]=-1;

cout<

數字三角形

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