Блог пользователя birne

Автор birne, 13 лет назад, По-русски

Возникли трудности в решении одной задачи. Далее попытаюсь популярно сформулировать подзадачу, для которой не получается придумать решение. Пусть есть некоторый набор рюкзаков. Для каждого рюкзака задана вместимость. Суммарная вместимость всех рюкзаков — N. Кроме того, есть N предметов, каждый из которых окрашен в один из N цветов (цвета разных предметов могут совпадать). Необходимо найти, сколькими способами можно разложить предметы по рюкзакам так, чтобы внутри одного рюкзака все предметы были одного цвета.

Ограничения небольшие, N <= 30.

Если вместимость каждого рюкзака 1, то, на сколько я понимаю, ответ — это просто число перестановок с повторениями. А в общем случае посчитать пока как-то не получается.

  • Проголосовать: нравится
  • +7
  • Проголосовать: не нравится

»
13 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Все-таки неправильно.

»
13 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

Разбиваем предметы на K кучек одинакового цвета. Теперь для каждой вместимости i=1 to N посмотрим, если кол-во рюкзаков вместимости i не равно кол-ву кучек размером i, то ответ на задачу 0. Иначе кол-во способов расставить кучки в рюкзаки (всё той же размерности i) равно факториалу их кол-ва. После чего посчитанные факториалы для каждой из вместимостей перемножаем, это и есть ответ.

»
13 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Ещё один факт, который несколько уточняет задачу. На самом деле "рюкзаки" — это циклы, на которые разбиваются инвариантные перестановки из леммы Бернсайда. И необходимо найти, сколькими способами можно раскрасить перестановку, чтобы все циклы были одного цвета. Так вот, эти циклы получаются длиной не больше 5и.