fork download
  1. var
  2. mat : array [1..6, 1..6] of longint =
  3. ( (-23, 11, -17, 8, -10, -10),
  4. (17, -25, -58, -32, -45, -65),
  5. (-20, -58, 28, -30, 4, -21),
  6. (-10, -47, -31, 100, -10, 25),
  7. (-11, -48, 29, -17, 2, -14),
  8. (14, -70, 80, 20, 41, -41) );
  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 0.01s 5276KB
stdin
Standard input is empty
stdout
83 60 71 54 62 127 
64 86 61 63 52 117 
81 61 3 31 7 52 
70 79 32 1 11 31 
60 49 1 18 1 56 
57 71 1 1 1 42