, 12, 2^12 , ( ). , /.
:
IsSeatingPossible( mask, passengers ) =
if ( no more passengers ) return true
return IsSeatingPossible =
new_mask = mask + brute force on passenger constraints
if any IsSeatingPossible( new_mask,
passengers - just processed passengers )
:
12 , , seat_i ( 2D (x,y) → 1D (x)). . , (A_1, A_2, .., A_k) , .
, , , - , . , , (A_1, A_2, .., A_k) (x_1, x_2, .., x_k). , N choose k, . , . (x_1, x_2, .., x_k), , (x_1, x_2, .., x_k) ( , ) , , , (x_1, x_2, .., x_k). ( , .)
. , , , , , . , memoization. O(N 2^N).
, N = 12, . , , , .