@@ -32,22 +32,23 @@ def bfs(r, c):
32
32
new_q .append ((nr , nc ))
33
33
q = new_q
34
34
return dist
35
-
36
- dist = [[0 ]* len (positions ) for _ in xrange (len (positions ))]
35
+
36
+ p = len (positions )
37
+ positions .append ([kx , ky ])
38
+ dist = [[0 ]* (p + 1 ) for _ in xrange (p + 1 )]
37
39
for i , (r , c ) in enumerate (positions ):
38
40
d = bfs (r , c )
39
- for j in xrange (i + 1 , len ( positions ) ):
41
+ for j in xrange (i + 1 , p + 1 ):
40
42
dist [j ][i ] = dist [i ][j ] = d [positions [j ][0 ]][positions [j ][1 ]]
41
- dp = [[POS_INF if popcount (mask )& 1 else NEG_INF ]* len ( positions ) for mask in xrange (1 << len ( positions ) )]
42
- dp [- 1 ] = [0 ]* len ( positions )
43
- for mask in reversed (xrange (1 , 1 << len ( positions ) )):
43
+ dp = [[POS_INF if popcount (mask )& 1 else NEG_INF ]* p for mask in xrange (1 << p )]
44
+ dp [- 1 ] = [0 ]* p
45
+ for mask in reversed (xrange (1 , 1 << p )):
44
46
fn = (max , min )[(popcount (mask )& 1 )^ 1 ]
45
- for i in xrange (len ( positions ) ):
47
+ for i in xrange (p ):
46
48
if (mask & (1 << i )) == 0 :
47
49
continue
48
- for j in xrange (len ( positions ) ):
50
+ for j in xrange (p ):
49
51
if j == i or (mask & (1 << j )) == 0 :
50
52
continue
51
53
dp [mask ^ (1 << i )][j ] = fn (dp [mask ^ (1 << i )][j ], dp [mask ][i ]+ dist [i ][j ])
52
- d = bfs (kx , ky )
53
- return max (dp [1 << i ][i ]+ d [positions [i ][0 ]][positions [i ][1 ]] for i in xrange (len (positions )))
54
+ return max (dp [1 << i ][i ]+ dist [i ][p ] for i in xrange (p ))
0 commit comments