Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.83 KB | None | 0 0
  1. from sys import stdin
  2. from typing import *
  3.  
  4. dist: Dict[Tuple[int, bool], int] = {}
  5.  
  6. def best_dist(arr, i, s, is_connected):
  7.     if i == len(arr) - 2:
  8.         return s + arr[i + 1] - arr[i]
  9.  
  10.     if (i, is_connected) in dist:
  11.         return dist[(i, is_connected)]
  12.  
  13.     if is_connected:
  14.         connected = best_dist(arr, i + 1, s + arr[i + 1] - arr[i], True)
  15.         not_connected = best_dist(arr, i + 1, s, False)
  16.  
  17.         best = min(connected, not_connected)
  18.     else:
  19.         best = best_dist(arr, i + 1, s + arr[i + 1] - arr[i], True)
  20.  
  21.     dist[(i, is_connected)] = best
  22.     return best
  23.  
  24. def main():
  25.     num_of_nails = int(stdin.readline())
  26.     nails = list(map(int, stdin.readline().split()))
  27.     nails.sort()
  28.  
  29.     print(best_dist(nails, 0, 0, False))
  30.     print(dist)
  31.  
  32.  
  33. if __name__ == "__main__":
  34.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement