nq1s788

18 5 запусков без удаления клеток

Mar 16th, 2026
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.02 KB | None | 0 0
  1. inf = 1000000000
  2.  
  3. def find_max(start):
  4.     global n, no_left, no_up, field, starts
  5.     answ = [[0 for i in range(n)] for j in range(n)]
  6.     answ[start[0]][start[1]] = field[start[0]][start[1]]
  7.     for i in range(start[0], n):
  8.         for j in range(start[1], n):
  9.             if (i, j) in starts:
  10.                 continue
  11.             if (i, j) in no_left:
  12.                 answ[i][j] = answ[i - 1][j] + field[i][j]
  13.             elif (i, j) in no_up:
  14.                 answ[i][j] = answ[i][j - 1] + field[i][j]
  15.             else:
  16.                 answ[i][j] = max(answ[i][j - 1], answ[i - 1][j]) + field[i][j]
  17.     return answ[n - 1][n - 1]
  18.  
  19. def find_min(start):
  20.     global n, no_left, no_up, field, starts
  21.     answ = [[inf for i in range(n)] for j in range(n)]
  22.     answ[start[0]][start[1]] = field[start[0]][start[1]]
  23.     for i in range(start[0], n):
  24.         for j in range(start[1], n):
  25.             if (i, j) in starts:
  26.                 continue
  27.             if (i, j) in no_left:
  28.                 answ[i][j] = answ[i - 1][j] + field[i][j]
  29.             elif (i, j) in no_up:
  30.                 answ[i][j] = answ[i][j - 1] + field[i][j]
  31.             else:
  32.                 answ[i][j] = min(answ[i][j - 1], answ[i - 1][j]) + field[i][j]
  33.     return answ[n - 1][n - 1]
  34.  
  35.  
  36. no_left_raw = [(0, (1, 19)), (1, (2, 12)), (2, (9, 12)), (3, (3, 4)), (5, (12, 16)), (6, (4, 7)), (7, (10, 16)), (10, (3, 4)), (10, (13, 17)), (11, (13, 16)), (13, (3, 9)), (16, (2, 4)), (16, (10, 18)), (18, (8, 16))]
  37. no_up_raw = [(0, (1, 19)), (1, (2, 5)), (8, (3, 3)), (3, (7, 8)), (9, (8, 8)), (18, (9, 9)), (15, (12, 14)), (19, (14, 5)), (5, (16, 16)), (16, (17, 17))]
  38. no_left = set()
  39. for e in no_left_raw:
  40.     for x in range(e[1][0], e[1][1] + 1):
  41.         no_left.add((x, e[0]))
  42. no_up = set()
  43. for e in no_up_raw:
  44.     for y in range(e[1][0], e[1][1] + 1):
  45.         no_up.add((e[0], y))
  46. starts = [(0, 0), (1, 1), (2, 3), (2, 10), (2, 13), (3, 6), (8, 2), (9, 7), (11, 5), (12, 11)]
  47. a = open('18.txt').readlines()
  48. n = len(a)
  49. for i in range(n):
  50.     a[i] = list(map(int, a[i].split()))
  51. answ_mx = 0
  52. answ_mn = inf
  53. for st1 in starts:
  54.     for st2 in starts:
  55.         if st2 == st1:
  56.             continue
  57.         for st3 in starts:
  58.             if st3 in [st1, st2]:
  59.                 continue
  60.             for st4 in starts:
  61.                 if st4 in [st1, st2, st3]:
  62.                     continue
  63.                 for st5 in starts:
  64.                     if st5 in [st1, st2, st3, st4]:
  65.                         continue
  66.                     field = [[0 for i in range(n)] for j in range(n)]
  67.                     for i in range(n):
  68.                         for j in range(n):
  69.                             field[i][j] = a[i][j]
  70.                     cur_mx_answ = find_max(st1) + find_max(st2) + find_max(st3) + find_max(st4) + find_max(st5)
  71.                     cur_mn_answ = find_min(st1) + find_min(st2) + find_min(st3) + find_min(st4) + find_min(st5)
  72.                     answ_mx = max(answ_mx, cur_mx_answ)
  73.                     answ_mn = min(answ_mn, cur_mn_answ)
  74. print(answ_mn, answ_mx)
Advertisement
Add Comment
Please, Sign In to add comment