今天是我開dp專題的第一天,就先來乙個最簡單dp題目。
數字三角形 (standard io)
codevs題號:1220(傳送門:
時間限制: 1000 ms 空間限制: 262144 kb 具體限制
題目描述
考慮在下面被顯示的數字金字塔。
寫乙個程式來計算從最高點開始在底部任意處結束的路徑經過數字的和的最大。
每一步可以走到左下方的點也可以到達右下方的點。
7 3 8
8 1 0
2 7 4 4
4 5 2 6 5
在上面的樣例中,從7 到 3 到 8 到 7 到 5 的路徑產生了最大和:30
輸入第乙個行包含 r(1<= r<=1000) ,表示行的數目。
後面每行為這個數字金字塔特定行包含的整數。
所有的被**的整數是非負的且不大於100。
輸出單獨的一行包含那個可能得到的最大的和。
樣例輸入
5 7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
樣例輸出
分析:這題目乍一眼看是可以用貪心ac,但是這題目用貪心的話會出現一些關於後效性的問題。
所以這題應該用dp解決,設狀態f[i][j]表示到達點(i,j)是的最大值
就有狀態轉移方程: f[i][j]=max(f[i-1][j],f[i-1][j-1])+a[i][j]
從最底下一層往上推。
不多說,上**
#include
#include
#include
using
namespace
std;
int f[1000][1000],a[1001][1000];
int main()
for(int i=1;i<=n;i++)
for(int i=n-1;i>=1;i--)
cout
<1][1];
return
0;}
數字三角形
題目描述 示出了乙個數字三角形。請編乙個程式計算從頂至底的某處的一條路 徑,使該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 1 三角形行數 25 三角形中的數字為整數 1000 輸入第一行為n,表示有n行 後面n行表示三角形每條路的路徑權 輸出路徑所經過的數字的總和最大的答案 樣...
數字三角形
description 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?input 輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n 1 n 100 表示數塔的高度,接下來用n行數字表示數塔,其中第i行有個i個整數,...
數字三角形
3 8 8 1 0 2 7 4 4 4 5 2 6 5 上圖給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,和最大的路徑稱為最佳路徑。你的任務就是求出最佳路徑上的數字之和。input 1 5 7 3 8 8 1 0 2 7 4 4 4 ...