циклом обходим массив:
если элемент влезает, то добавляем его и удаляем из массива
если элемент не влезает, то переносим элемент в конец массива и дополнительно сохраняем его значение/ключ в переменной
ну и обходим массив вложенным циклом пока не найдем подходящий элемент или не сделаем круг и не достигнем элемента который сохранен в переменной.
привлекает? да. особенно если эти задачи востребованы в бизнесе. приведу простой пример, я готов предложить 1500 за код который бы решал "задачу рюкзака" для получения оптимального размера/объема посылки.