fork download
  1. var
  2. mat : array [1..6, 1..6] of longint =
  3. ( (-36, 15, -20, -18, 6, -25),
  4. (18, -23, -20, 7, -30, -23),
  5. (4, -34, 8, -42, -18, 12),
  6. (-33, -45, -4, -5, -5, -2),
  7. (-40, 12, -30, -24, 12, -14),
  8. (-12, -35, 4, -18, -17, -24) );
  9. inf : longint;
  10. dp : array [1..6, 1..6] of longint;
  11. i, j : longint;
  12.  
  13. function max(a, b: longint): longint;
  14. begin
  15. if a > b then max := a
  16. else max := b;
  17. end;
  18.  
  19. function min(a, b: longint): longint;
  20. begin
  21. if a < b then min := a
  22. else min := b;
  23. end;
  24.  
  25. function f(y, x: longint): longint; // minimum hp dari posisi x, y sampai 6,6
  26. begin
  27. if (x > 6) or (y > 6) then begin // out of bound
  28. f := inf;
  29. end else if dp[y][x] <> -1 then begin
  30. f := dp[y][x];
  31. end else begin
  32. if (x = 6) and (y = 6) then begin // base case
  33. f := max(1, -mat[y][x] + 1);
  34. end else begin
  35. f := max(1, -mat[y][x] + min(f(y+1, x), f(y, x+1)));
  36. end;
  37. dp[y][x] := f;
  38. end;
  39. end;
  40.  
  41. begin
  42. inf := 1000000000;
  43. for j:=1 to 6 do for i:=1 to 6 do dp[j][i] := -1;
  44. for j:=1 to 6 do begin
  45. for i:=1 to 6 do begin
  46. write(f(j, i), ' ');
  47. end;
  48. writeln();
  49. end;
  50. end.
  51.  
Success #stdin #stdout 0s 5280KB
stdin
Standard input is empty
stdout
81 58 73 88 71 77 
45 76 53 70 77 52 
63 67 33 79 47 29 
119 86 41 37 32 41 
109 69 81 51 27 39 
103 91 56 60 42 25