*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;