File tree Expand file tree Collapse file tree
kattis/Ball Bearings/Collecting beepers Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+
2+ from functools import cache
3+
4+ @cache
5+ def dist (A : tuple [float ], B : tuple [float ]) -> float :
6+ return sum (
7+ abs (x - y ) for x , y in zip (A , B )
8+ )
9+
10+ for _ in range (int (input ())):
11+ X , Y = map (int , input ().split ())
12+ start = tuple (map (int , input ().split ()))
13+ beepers = [
14+ (* map (int , input ().split ()), ) for _ in range (int (input ()))
15+ ]
16+ totalSubsets = 1 << len (beepers ) # 2 ** n sets
17+
18+ # dp[j][mask] = Minimal cost to be at j,
19+ # while having visited beepers in mask
20+ dp = [[float ("inf" ) for _ in range (totalSubsets )] for _ in range (len (beepers ))]
21+ for mask in range (totalSubsets ):
22+ for j in range (len (beepers )):
23+ if mask == (1 << j ):
24+ dp [j ][mask ] = dist (start , beepers [j ])
25+ elif mask & (1 << j ):
26+ dp [j ][mask ] = min (
27+ dist (
28+ beepers [j ], beepers [k ]
29+ ) + dp [k ][mask & ~ (1 << j )] for k in range (len (beepers ))
30+ if (mask & ~ (1 << j )) & (1 << k )
31+ )
32+
33+ res = min (
34+ dp [j ][totalSubsets - 1 ] + dist (beepers [j ], start ) for j in range (len (beepers ))
35+ )
36+
37+
38+ print (res )
39+
40+
You can’t perform that action at this time.
0 commit comments