int bitmaskDp(int n) {
int[][] dp = new int[1 << n][n];
fill(dp, INF);
for (int start = 0; start < n; start++) dp[1 << start][start] = base(start);
for (int mask = 0; mask < (1 << n); mask++) {
for (int last = 0; last < n; last++) if (dp[mask][last] != INF) {
for (int next = 0; next < n; next++) if ((mask & (1 << next)) == 0) {
relax(dp, mask, last, next);
}
}
}
return answer(dp);
}
def bitmask_dp(n: int) -> int:
dp = [[INF] * n for _ in range(1 << n)]
for start in range(n):
dp[1 << start][start] = base(start)
for mask in range(1 << n):
for last in range(n):
if dp[mask][last] == INF:
continue
for nxt in range(n):
if not mask & (1 << nxt):
relax(dp, mask, last, nxt)
return answer(dp)
def bitmaskDp(n: Int): Int =
val dp = Array.fill(1 << n, n)(INF)
for start <- 0 until n do dp(1 << start)(start) = base(start)
for mask <- 0 until (1 << n) do
for last <- 0 until n do
if dp(mask)(last) != INF then
for next <- 0 until n do
if (mask & (1 << next)) == 0 then relax(dp, mask, last, next)
answer(dp)
int bitmaskDp(int n) {
std::vector<std::vector<int>> dp(1 << n, std::vector<int>(n, INF));
for (int start = 0; start < n; start++) dp[1 << start][start] = base(start);
for (int mask = 0; mask < (1 << n); mask++) {
for (int last = 0; last < n; last++) if (dp[mask][last] != INF) {
for (int next = 0; next < n; next++) if ((mask & (1 << next)) == 0) {
relax(dp, mask, last, next);
}
}
}
return answer(dp);
}