43 lines
2.0 KiB
Plaintext
43 lines
2.0 KiB
Plaintext
*process source xref attributes or(!);
|
|
triang: Proc Options(Main);
|
|
Dcl nn(18,18) Bin Fixed(31);
|
|
Dcl (rows,i,j) Bin Fixed(31);
|
|
Dcl (p,k,kn) Bin Fixed(31);
|
|
Call f_r(1 ,' 55 ');
|
|
Call f_r(2 ,' 94 48 ');
|
|
Call f_r(3 ,' 95 30 96 ');
|
|
Call f_r(4 ,' 77 71 26 67 ');
|
|
Call f_r(5 ,' 97 13 76 38 45 ');
|
|
Call f_r(6 ,' 07 36 79 16 37 68 ');
|
|
Call f_r(7 ,' 48 07 09 18 70 26 06 ');
|
|
Call f_r(8 ,' 18 72 79 46 59 79 29 90 ');
|
|
Call f_r(9 ,' 20 76 87 11 32 07 07 49 18 ');
|
|
Call f_r(10,' 27 83 58 35 71 11 25 57 29 85 ');
|
|
Call f_r(11,' 14 64 36 96 27 11 58 56 92 18 55 ');
|
|
Call f_r(12,' 02 90 03 60 48 49 41 46 33 36 47 23 ');
|
|
Call f_r(13,' 92 50 48 02 36 59 42 79 72 20 82 77 42 ');
|
|
Call f_r(14,' 56 78 38 80 39 75 02 71 66 66 01 03 55 72 ');
|
|
Call f_r(15,' 44 25 67 84 71 67 11 61 40 57 58 89 40 56 36 ');
|
|
Call f_r(16,' 85 32 25 85 57 48 84 35 47 62 17 01 01 99 89 52 ');
|
|
Call f_r(17,' 06 71 28 75 94 48 37 10 23 51 06 48 53 18 74 98 15 ');
|
|
Call f_r(18,' 27 02 92 23 08 71 76 84 15 52 92 63 81 10 44 10 69 93');
|
|
rows=hbound(nn,1);
|
|
|
|
do r=rows by -1 to 2;
|
|
p=r-1; /*traipse through triangle rows. */
|
|
do k=1 to p;
|
|
kn=k+1; /*re-calculate the previous row. */
|
|
nn(p,k)=max(nn(r,k),nn(r,kn))+nn(p,k); /*replace previous nn */
|
|
end;
|
|
end;
|
|
Put Edit('maximum path sum:',nn(1,1))(Skip,a,f(5)); /*display result*/
|
|
f_r: Proc(r,vl);
|
|
/* fill row r with r values */
|
|
Dcl r Bin Fixed(31);
|
|
Dcl vl Char(*);
|
|
Dcl vla Char(100) Var;
|
|
vla=' '!!trim(vl);
|
|
get string(vla) Edit((nn(r,j) Do j=1 To r))(f(3));
|
|
End;
|
|
End;
|