給定乙個由n行數字組成的數字三角形,如下圖所示:
從上到下最大的值的總和。
這道題在動態規劃裡是入門級的題目,運用到了遞迴。
對於這道題共有兩個思路,第一種是從上向下推,第二種是從下向上推。
先從第一種分析。
我們設這個二維陣列為dp,在推導的時候我們先把遞的公式寫出來,從上向下退的話,zui(a[i][j])=max(zui(dp[i+1][j]),zui(dp[i+1][j+1]))+dp[i][j].
因為我們從(0,0)開始遞迴所以最開始i和j就設為0。
#include
using
namespace std;
int dp[
101]
[101];
int n;
intzui
(int i,
int j)
intmain()
} cout<<
zui(0,
0)<
}
第二種思路為從下向上推找出到達這一點時的最佳解,我們可以寫出公式zui(a[i][j])=max(zui(a[i-1][j]),zuia[i-1][j])+a[i][j];
這裡要特別注意當j=0和j=n-1,要做一次判斷,
#include
using
namespace std;
int dp[
101]
[101];
int n;
intzui
(int i,
int j)
intmain()
}int max3=0;
for(
int i=
0;icout<
}
這兩個思路基本一致最重要的是對思考多嘗試 數字三角形(動態規劃入門題)
題目描述 7 3 88 1 0 2 7 4 4 4 5 2 6 5 圖1 圖1給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,你的任務就是找到最大的和。輸入的是一行是乙個整數n 1 n 100 給出三角形的行數。下面的n行給出數字三角形...
動態規劃入門1 數字三角形 C
作為乙個菜雞,研究了幾天的dp,把經典例題研究了幾遍,現在,我在這發表一下自己的菜雞見解,記錄下我對dp的理解。dp裡面少不了遞迴,當然也能混在搜尋裡面構成記憶化搜尋作為優化,也可以用遞推來動態規劃。具體你要我說動態規劃是個什麼東西,我也只能說說自己的理解 滿足條件 綜上,這個動態規劃很重要的就是記...
動態規劃 數字三角形
如圖所示的數字三角形,從頂部出發,在每一結點可以選擇向左走或得向右走,一直走到底層,要求找出一條路徑,使路徑上的值最大。第一行是數塔層數n 1 n 100 第二行起,按數塔圖形,有乙個或多個的整數,表示該層節點的值,共有n行。輸出最大值。5 1311 8 12 7 26 6 14 15 8 12 7...