Перебор подмножеств (bitmask) на Python: как решать + 6 задач с проверкой

Перебор подмножеств (bitmask) — это приём, когда мы рассматриваем все варианты «какие элементы взять», представляя набор как двоичную маску: i-й бит равен 1, если элемент выбран. В олимпиадных задачах он встречается там, где нужно распределить предметы по группам, проверить все комбинации покупок/лота, подобрать сумму/вес, найти лучшую команду, разложить призы на два сиденья так, чтобы разница была минимальной.

Как распознать задачу

Обычно в условии есть признаки:

Суть приёма

Мы перебираем все маски от 0 до 2^n - 1 и для каждой быстро считаем нужную характеристику (сумму, вес, разницу). Это ускоряет решение, потому что вместо сложных переборов «вручную» мы делаем однотипный цикл по числам и используем быстрые битовые операции и предвычисления.

С чего начать учиться

Ниже — задачи с автопроверкой и разбором подхода.

Задачи по теме «Перебор подмножеств (bitmask)»

Смежные темы

Весь каталог задач