题目: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.