Skip to content

Commit 07900a1

Browse files
authored
Update maximum-number-of-moves-to-kill-all-pawns.py
1 parent 1220eb1 commit 07900a1

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

Python/maximum-number-of-moves-to-kill-all-pawns.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,23 @@ def bfs(r, c):
3232
new_q.append((nr, nc))
3333
q = new_q
3434
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)]
3739
for i, (r, c) in enumerate(positions):
3840
d = bfs(r, c)
39-
for j in xrange(i+1, len(positions)):
41+
for j in xrange(i+1, p+1):
4042
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)):
4446
fn = (max, min)[(popcount(mask)&1)^1]
45-
for i in xrange(len(positions)):
47+
for i in xrange(p):
4648
if (mask&(1<<i)) == 0:
4749
continue
48-
for j in xrange(len(positions)):
50+
for j in xrange(p):
4951
if j == i or (mask&(1<<j)) == 0:
5052
continue
5153
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

Comments
 (0)