Bitmask DP

Using bits to represent state.

Bitmasks represent sets: bit ii indicates element ii membership.

TSP example: dp[mask][i] = min cost visiting cities in mask, ending at ii.

for mask from 0 to 2^n - 1:
    for last in mask:
        for next not in mask:
            newMask = mask | (1 << next)
            dp[newMask][next] = min(dp[newMask][next],
                                    dp[mask][last] + dist[last][next])

Time: O(n22n)O(n^2 \cdot 2^n). Space: O(n2n)O(n \cdot 2^n). Feasible for n20n \leq 20.