Сначала отсортируйте ваши объекты по весу.Затем рекурсивно запакуйте рюкзак.Если наименьший весовой объект, который еще не рассматривался, не подходит, или у нас нет оставшихся объектов, то добавьте текущий рюкзак в наш список и верните его, в противном случае добавьте текущий рюкзак в наш список для каждого подходящего объекта, вставьте его ипопробуйте упаковать оставшуюся часть рюкзака с объектами, которые тяжелее, чем последний упакованный нами объект.
Если мы можем упаковать более одного предмета данного типа, замените его менее чем на меньшее или равное.
Если у нас есть несколько объектов одинакового веса, нам нужно сначала отсортировать их по весу, а затем по произвольному порядку и использовать их.
PackKnapsack(knapsack, objects)
add knapsack to list
if objects is empty return
if smallest object does not fit return
for each object in order from smallest to largest
if currentobject does not fit
break
PackKnapsack(knapsack + currentObject, objects heavier than current object)