Это не так сложно. Надо набрать близко к сумме, а потом приближаться, убирая одни предметы и набирая другие. Я набрал 21 штуку (6 позиций) на десятку ровно
Думаю, проще и надежнее работать почти без подбора.
Я решал так: Число Фробениуса для цен двух самых дешевых товаров
. Значит, любая сумма бОльшая этого числа, набирается двумя данными товарами (подбором или простеньким линейным сравнением). Но
значительно меньше, чем останется от тысячи центов после покупки остальных товаров.
PS: Тем, кто не знает, что такое число Фробениуса, гуглите "coin problem". Для двух номиналов монет там все прозрачно. Для большего числа все сложнее. Но в данной задачи формулы для двух хватает с лихвой.