1.實踐題目
7-1 數字三角形 (30 分)
給定乙個由 n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形 的頂至底的一條路徑(每一步可沿左斜線向下或右斜線向下),使該路徑經過的數字總和最大。
2.問題描述
輸入有n+1行:
第 1 行是數字三角形的行數 n,1<=n<=100。
接下來 n行是數字三角形各行中的數字。所有數字在0..99 之間。
輸出最大路徑的值。
3.演算法描述
採用動態規劃法解決此類問題,初始狀態為三角形底邊的數值,某點的最大值=自身+對應下面一行左右兩點中的最大值
此**中由下自上填表,最終位於陣列頂端的值為三角形自頂至底的所經過路徑的數字總和最大值。
**如下:
#include using4.演算法時間及空間複雜度分析(要有分析過程)namespace
std;
const
int m=100
;int
n;int
a[m][m];
intmaxsum()
return a[1][1];}
intmain()
其遞迴方程式可記為:
d[i][j]=0 (i=0;j=0)
d[i][j]=max(d[i+1][j],d[i+1][j+1]+d[i][j],時間與空間複雜度均為o(n)
5.心得體會(對本次實踐收穫及疑惑進行總結)
在進行程式設計的過程中,我首先想到的是將填表結果儲存到最下面一行裡,但我的同伴提示我應該儲存在三角形頂部才便於理解,我在過後做了修改。討論使我對這道題目以及動態規劃都有了更深的了解。
演算法第三章上機實踐報告
一 實踐題目 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 由題目可知從上到下,只能往左或者往右...
演算法第三章上級實踐報告
7 2 最大子段和 40 分 給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整數均為負數時,定義子段和為0。要求演算法的時間複雜度為o n 輸入有兩行 第一行是n值 1 n 10000 第二行是n個整數。輸出最大子...