fork download
  1. var
  2. mat : array [1..6, 1..6] of longint =
  3. ( (-36, 19, -24, -18, 6, -25),
  4. (18, -27, -24, 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 5284KB
stdin
Standard input is empty
stdout
52 33 52 61 71 77 
16 55 28 43 77 52 
34 38 4 50 47 29 
90 57 12 8 32 41 
61 21 33 3 27 39 
103 91 56 60 42 25