【问题描述】设有一个三角形的数塔,顶点结点称为根结点,每个结点有一个
整数数值。从顶点出发,可以向左走,也可以向右走。如图
1
所示。寻找一条从根结
点到达数塔最底层的路径,使得路径上结点的和为最大。
【输入格式】
第一行:一个整数
n
(
n<=100
),表示数塔共有
n
层。
以下
n
行(第
2
行至第
n+1
行):
第
i
行有
i
个整数,每个整数不超过
10000
,
依次是此行结点上的数值,整数之间用空格隔开。
【输出格式】
输出最大的路径和
递归代码如下:var n:longint;a:array[1..100,1..100]of longint;i,j:longint;
function max(a,b:longint):longint;
begin
if a<b then max:=b else max:=a;
end;
function ans(x,y:integer):longint;
begin
if (x<n) and (y<n) then
ans:=max(ans(x+1,y),ans(x+1,y+1))+a[x,y]
else ans:=a[x,y];
end;
begin
readln(n);
for i:=1 to n do
for j:=1 to i do
read(a[i,j]);
writeln(ans(1,1));
end.
function max(a,b:longint):longint;
begin
if a<b then max:=b else max:=a;
end;
function ans(x,y:integer):longint;
begin
if (x<n) and (y<n) then
ans:=max(ans(x+1,y),ans(x+1,y+1))+a[x,y]
else ans:=a[x,y];
end;
begin
readln(n);
for i:=1 to n do
for j:=1 to i do
read(a[i,j]);
writeln(ans(1,1));
end.