題目:ide
Description spa
你和權權是一對很好很好的朋友。有一天,大家無聊得很,便上網衝浪,忽然在一個叫作USACO的網中找到了一個遊戲:《數字金子塔》。遊戲規則是這樣的:求一個數字金字塔中從最高點開始在底部任意處結束的路徑通過數字的和的最大,其中的每一步能夠走到下方的點也能夠到達右下方的點。例如在下面的例子中,從7 — 3 — 8 — 7 –- 5的路徑產生了最大和:30。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
大家便約定了誰能計算出最後的值即是贏者。你仰天(天花板)長嘆:我能成爲贏者嗎,要知道權權但是很厲害的哦…… code
Input 遊戲
第一行輸入N(1<=N<=1000),表示數字金字塔行的數目。後面N輸入這個數字金字塔,每一個數字皆爲整數(1<=x<=10000),每2個整數之間有1個空格。ip
Output it
單獨一行輸出最後獲得的最大的和。io
做者思路:dp,順推方法。遞推式:
f[j]={f[j-1]}+a[i,j];function
代碼:class
var a:array[0..1001,0..1001] of longint; f:array[0..1001] of longint; n,i,j,ans:longint; function max(a,b:longint):longint; begin if a>b then exit(a) else exit(b); end; begin read(n); for i:=1 to n do for j:=1 to i do read(a[i,j]); f[1]:=a[1,1]; for i:=2 to n do for j:=i downto 1 do f[j]:=max(f[j],f[j-1])+a[i,j]; for i:=1 to n do if f[i]>ans then ans:=f[i]; write(ans); end.