問題描述問題分析(圖3.1-1)示出了乙個數字三角形。 請編乙個程式計算從頂至底的某處的一條路
徑,使該路徑所經過的數字的總和最大。
●每一步可沿左斜線向下或右斜線向下走;
●1<三角形行數≤100;
●三角形中的數字為整數0,1,…99;
輸入格式
檔案中首先讀到的是三角形的行數。
接下來描述整個三角形
輸出格式
最大總和(整數)
樣例輸入57
3 88 1 0
2 7 4 4
4 5 2 6 5
樣例輸出
30
這很明顯是個動態規劃的問題。需要記憶化儲存子問題的解。
其實將這個三角形到過來之後,更容易有思路:這個樣子,
然後用最大值去加下一層的數,這樣不斷迴圈,直到最後一層,求得整體最大值。
由於題目給出的是正的三角形,得在行首和行尾補 0 ,這樣每個數都可以就不需要對行首和行尾的數字做特殊處理。
**實現
#include
#include
using namespace std;
int num[2]
[105];
intmax
(int a,
int b)
intcalculate
(int i,
int m)
// 兩個維度的陣列輪流計數
return1;
}else
return0;
}}intmain()
sort
(num[0]
, num[0]
+100
, greater<
int>()
);// 對陣列進行降序排序,因為題目給出的最大值是 100,這裡就對前 100 個數排序
sort
(num[1]
, num[1]
+100
, greater<
int>()
);cout <<
max(num[0]
[0],num[1]
[0])
;}
藍橋杯 數字三角形
題目大意 編寫程式計算從三角形頂部到底部的某處的一條路徑,使得該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 1 三角形行數 100 三角形中的數字為整數0,1,99 題目分析 很好的一道動態規劃的例子。解題思路是自底向上分析,既然這條路徑能從頂部到底部,那麼從下往上看,也是等效的...
python藍橋杯數字三角形
回溯法求數字三角形 從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,你的任務就是找到最 大的和。路徑上的每一步只能從乙個數走到下一層和它最近的左邊的那個數或者右邊的那個數。此外,向左下走的次數與向右下走的次數相差不能超過 1。輸入格式 輸入的第一行包含乙個整...
藍橋杯 數字三角形 簡單DP
演算法訓練 數字三角形 時間限制 1.0s 記憶體限制 256.0mb 問題描述 圖 示出了乙個數字三角形。請編乙個程式計算從頂至底的某處的一條路 徑,使該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 1 三角形行數 100 三角形中的數字為整數0,1,99 圖 輸入格式 檔案中首...