Разве вы не можете просто отсортировать оба списка по низкому и высокому уровню, а затем поместить каждое собрание в первую (т. Е. Наименьшую) комнату, достаточно большую, чтобы его вместить?
Насколько я вижу, что соответствует всем вашим критериям:
- Проверить
- Это должно следовать непосредственно из того факта, что мы всегда выбирали наименьшую возможную комнату
- Поскольку мы отсортировали собрание по низкой посещаемости и высокой посещаемости, мы никогда не поместим большую конференцию в меньшую комнату.
- Если мы дойдем до конца списка комнат до того, как достигнем конца списка собраний, невозможно было найти расписание.
Изменить в ответ на ваш комментарий:
Мы делаем два прохода. Первый идет выше. После этого, если остались какие-либо встречи, действуйте следующим образом:
Просмотрите список комнат и список внеплановых собраний от высшего к низшему.
Если текущее собрание помещается в текущую комнату: поместите его в эту комнату (добавив собрание, которое ранее находилось в этой комнате, в список незапланированных собраний (в самой нижней позиции, чтобы сохранить порядок сортировки)). Перейти к следующему собранию и комнате в списке.
Если текущая встреча не помещается в текущей комнате: эта встреча не может быть запланирована. Удалите собрание из списка и попробуйте следующее собрание (с той же комнатой).
Повторяйте до тех пор, пока список незапланированных встреч не станет пустым.