题意

写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。


分析

f[j] 表示第i行第j个位置上的数到顶点的最大值。

F[j]=max{a[j]+f[j-1],a[j]+f[j]}2<=j<i

F[1]=a[1]+f[1]


var
n,i,j,w:longint;
a,f:array[1..10000]of longint;
begin
    readln(n);
    fillchar(f,sizeof(f),0);
    readln(a[1]);
    f[1]:=a[1];
    for i:=2 to n do
    begin
        for j:=1 to i do
        read(a[j]);
        for j:=i downto 2 do
        if f[j-1]<f[j] then f[j]:=a[j]+f[j] else f[j]:=a[j]+f[j-1];
        f[1]:=a[1]+f[1];
    end;
    w:=0;
    for i:=1 to n do
    if f[i]>w then w:=f[i];
    write(w);
end.