演算法第三章上機實踐報告

2022-09-12 19:42:09 字數 994 閱讀 6229

7-1 數字三角形 (30 分)

給定乙個由 n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形 的頂至底的一條路徑(每一步可沿左斜線向下或右斜線向下),使該路徑經過的數字總和最大。

輸入有n+1行:

第 1 行是數字三角形的行數 n,1<=n<=100。

接下來 n行是數字三角形各行中的數字。所有數字在0..99 之間。

輸出最大路徑的值。

在這裡給出一組輸入。例如:

5 

7 3 8

8 1 0

2 7 4 4

4 5 2 6 5

在這裡給出相應的輸出。例如:

30

這一題運用備忘錄方法就好。sum函式是針對三角形中的(i,j)點,當sum[i][j]值為零時,將

max(sum(i + 1,j),sum(i + 1,j + 1)) + a[i][j]賦給sum[i][j],若到達

底層,就直接將a[i][j]的值賦給sum[i][j]。時間複雜度是o(n^2)。

#include using

namespace

std;

int a[100][100

];int n;//

n為行數

int sum[100][100

];

int max(int a,int

b)

int sum(int i,int

j) }

intmain()

cout

<< sum(0,0

);}

在做本次上機實踐時,我覺得題目都有很多種解法,但是要追求時間複雜度較低的演算法比較困難,需要學習並掌握更多的知識。

演算法第三章上機實踐報告

一 實踐題目 7 2 最大子段和 給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整數均為負數時,定義子段和為0。要求演算法的時間複雜度為o n 輸入格式 輸入有兩行 第一行是n值 1 n 10000 第二行是n個整...

演算法第三章上機實踐報告

7 1 數字三角形 30 分 給定乙個由 n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形 的頂至底的一條路徑 每一步可沿左斜線向下或右斜線向下 使該路徑經過的數字總和最大。1.路徑經過的數字總和最大 2.每一步可沿左斜線向下或右斜線向下 1 由題目可知從上到下,只能往左或者往右...

演算法第三章上機實踐報告

引論 這是第二次在演算法課上的上機實踐了,雖然逐漸有了思考演算法的感覺,但這一次上機實踐還是並不輕鬆。關鍵在於在實驗課前對第三章的知識掌握得還不足夠,經常會因為明明知道理論上如何解題而苦於無法將其實現。不過,通過本次上機實踐,我的收穫是非常豐富的,下面用實踐課題目中的第一題 數字三角形 開始分享我的...