@@ -30,26 +30,28 @@ class Solution {
30
30
}
31
31
return dist;
32
32
};
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) {
36
38
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) {
38
40
dist[j][i] = dist[i][j] = d[positions[j][0 ]][positions[j][1 ]];
39
41
}
40
42
}
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);
44
46
}
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) {
47
49
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) {
49
51
if ((mask & (1 << i)) == 0 ) {
50
52
continue ;
51
53
}
52
- for (int j = 0 ; j < size (positions) ; ++j) {
54
+ for (int j = 0 ; j < p ; ++j) {
53
55
if (j == i || (mask & (1 << j)) == 0 ) {
54
56
continue ;
55
57
}
@@ -59,9 +61,8 @@ class Solution {
59
61
}
60
62
}
61
63
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]);
65
66
}
66
67
return result;
67
68
}
0 commit comments