Pascal 数字三角形问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 06:47:21
你会从输入文件中,得到形式如下的一个三角形,三角形共有N层:
(7)
(3) 8
(8) 1 0
2 (7) 7 4
4 (5) 2 6 5

从三角形顶点,沿左斜线方向或右斜线方向下降到三角形底边的路线是一条合法路径。例如,图中用括号标出的路径就是合法的;它经过了7,3,8,7,5这5个数字,它们的和是30。你要编写一个程序,求解一条合法路径,使这条路径上经过的各数字的总和最大,并把这个最大的总输出出来。

输入文件:包括两部分。第一行是一个整数N,表示三角形的层数;随后N行按照示例的格式给出数字三角形。

输出文件:一个整数。

数据规模:3<=N<=10

输入示例:
5
7
3 8
8 1 0
2 7 7 4
4 5 2 6 5

输出示例:
30
求代码,好的加分

var a:array[0..11,0..11] of longint;
max,i,j,n:longint;
begin
readln(n);
for i:=1 to n do
for j:=1 to i do
readln(a[i,j]);
for i:=2 to n do a[i,1]:=a[i,1]+a[i-1,1];
for i:=2 to n do a[i,i]:=a[i,i]+a[i-1,i-1];
for i;=2 to n do
for j:=2 to i-1 do
if a[i-1,j]<a[i-1,j-1] then
a[i,j]:=a[i,j]+a[i-1,j-1]
else a[i,j]:=a[i,j]+a[i-1,j];
max;=-maxlongint;
for i:=1 to n do
if a[n,i]>max then max:=a[n,i];
writeln(max);
end.

var a:array[0..11,0..11] of longint;
max,i,j,n:longint;
begin
readln(n);
for i:=1 to n do
for j:=1 to i do
readln(a[i,j]);
begin
for i:=2 to n do a[i,1]:=a[i,1]+a[i-1,1];
for i:=2 to n do a[i,i]:=a[i,i]+a[i-1,i-1];
for i;=2 to n do
for j:=2 to i-1 do
if a[i-1,j]<a[i-1,j-1] then
a[i,j]:=a[i,j]+a[i-1,j-