Skip to content

Commit 1220eb1

Browse files
authored
Update maximum-number-of-moves-to-kill-all-pawns.cpp
1 parent 45f574d commit 1220eb1

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

C++/maximum-number-of-moves-to-kill-all-pawns.cpp

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,26 +30,28 @@ class Solution {
3030
}
3131
return dist;
3232
};
33-
34-
vector<vector<int>> dist(size(positions), vector<int>(size(positions)));
35-
for (int i = 0; i < size(positions); ++i) {
33+
34+
const int p = size(positions);
35+
positions.emplace_back(vector<int>{kx, ky});
36+
vector<vector<int>> dist(p + 1, vector<int>(p + 1));
37+
for (int i = 0; i <= p; ++i) {
3638
const auto& d = bfs(positions[i][0], positions[i][1]);
37-
for (int j = i + 1; j < size(positions); ++j) {
39+
for (int j = i + 1; j <= p; ++j) {
3840
dist[j][i] = dist[i][j] = d[positions[j][0]][positions[j][1]];
3941
}
4042
}
41-
vector<vector<int>> dp(1 << size(positions));
42-
for (int mask = 1; mask < 1 << size(positions); ++mask) {
43-
dp[mask].assign(size(positions), __builtin_popcount(mask) & 1 ? POS_INF : NEG_INF);
43+
vector<vector<int>> dp(1 << p);
44+
for (int mask = 1; mask < 1 << p; ++mask) {
45+
dp[mask].assign(p, __builtin_popcount(mask) & 1 ? POS_INF : NEG_INF);
4446
}
45-
dp.back().assign(size(positions), 0);
46-
for (int mask = (1 << size(positions)) - 1; mask >= 1; --mask) {
47+
dp.back().assign(p, 0);
48+
for (int mask = (1 << p) - 1; mask >= 1; --mask) {
4749
const auto& turn = (__builtin_popcount(mask) & 1) ^ 1;
48-
for (int i = 0; i < size(positions); ++i) {
50+
for (int i = 0; i < p; ++i) {
4951
if ((mask & (1 << i)) == 0) {
5052
continue;
5153
}
52-
for (int j = 0; j < size(positions); ++j) {
54+
for (int j = 0; j < p; ++j) {
5355
if (j == i || (mask & (1 << j)) == 0) {
5456
continue;
5557
}
@@ -59,9 +61,8 @@ class Solution {
5961
}
6062
}
6163
int result = 0;
62-
const auto& d = bfs(kx, ky);
63-
for (int i = 0; i < size(positions); ++i) {
64-
result = max(result, dp[1 << i][i] + d[positions[i][0]][positions[i][1]]);
64+
for (int i = 0; i < p; ++i) {
65+
result = max(result, dp[1 << i][i] + dist[i][p]);
6566
}
6667
return result;
6768
}

0 commit comments

Comments
 (0)