Редактировать Этот ответ отредактирован из-за фактической неверности. Следование этому совету причинит вам только вред.
На самом деле это не проблема ранца, потому что предполагается, что вы не можете упаковать больше предметов, чем есть место в каком-либо контейнере. В вашем случае вы хотите найти самую дешевую комбинацию, которая заполнит пространство, учитывая тот факт, что может произойти переполнение.
Мое решение, которое я не знаю, является оптимальным, но оно должно быть достаточно близким, заключалось бы в том, чтобы рассчитать для каждого элемента соотношение затрат и выгод, найти элемент с наибольшим преимуществом и заполнить структуру этим элементом до нет места для еще одного предмета. Затем я проверил бы, была ли комбинация с любым из других доступных предметов, которая могла бы заполнить доступный слот за меньшую цену, чем стоимость одного из самых дешевых предметов, и затем, если такое решение существует, используйте эту комбинацию, иначе используйте еще из самых дешевых предметов.
Amenddum На самом деле это также может быть NP-завершенным, но я пока не уверен. В любом случае для всех практических целей это изменение должно быть намного быстрее, чем наивное решение.