演算法第三章實踐報告
阿新 • • 發佈:2018-11-05
7-1數字三角形
1.實踐題目
給定一個由 n行數字組成的數字三角形如下圖所示。試設計一個演算法,計算出從三角形 的頂至底的一條路徑(每一步可沿左斜線向下或右斜線向下),使該路徑經過的數字總和最大。
2.問題描述
輸入格式:
輸入有n+1行:
第 1 行是數字三角形的行數 n,1<=n<=100。
接下來 n行是數字三角形各行中的數字。所有數字在0..99 之間。
輸出格式:
輸出最大路徑的值。
3.演算法描述
dp[i][j]=max(dp[i+1][j]+val[i][j],dp[i+1][j+1]+val[i][j])
4.演算法時間及空間複雜度分析(要有分析過程)
for(int i=n;i>=1;i--){
for (int j=1;j<=i;j++){
dp[i][j]=max(dp[i+1][j]+val[i][j],dp[i+1][j+1]+val[i][j]);
}
因為演算法是兩層for迴圈,演算法複雜度為O(n2)
由於申請了額外空間儲存,所以空間複雜度為O(n2)
5.心得體會(對本次實踐收穫及疑惑進行總結)
動態規劃其實並沒有想象中的那麼困難,程式碼實現上並不會過於複雜,其實都是幾段就能實現,但比較困難的地方就在於能否想出演算法問題的遞迴方程式,我覺得要學好動態規劃還得多練習多打程式碼。