Думайте об этом рекурсивно, то есть вы хотите думать об этом с точки зрения возможных подзадач. Итак, если у вас есть лодка с тремя пассажирами, это, очевидно, похоже на лодку с одним пассажиром, плюс любую комбинацию из двух пассажиров.
Лодка с двумя пассажирами имеет пассажира плюс «лодка, заполненная одним жителем».
Итак, ваш алгоритм будет выглядеть в основном как
to find all combinations of n occupants,
pick an occupant
if n = 1 return
if n > 1 find all combinations of (n-1) occupants.
Обратите внимание, что это не точное решение, так как это очень похоже на домашнюю работу.