У меня есть несколько типов монет, у каждой есть вес (wi) и стоимость (ci). Итак, мне нужно сделать рюкзак весом == W и (!) Минимальной стоимостью монет в нем. Я не могу сделать повторение использования DP.
Рюкзак с минимальной стоимостью
comment
Вы имеете в виду, что вам разрешено заводить отношения?
- person jim mcnamara   schedule 17.03.2013
comment
Мне нужно завязать отношения или как я буду использовать DP без него?
- person user2178460   schedule 17.03.2013
Ответы (1)
Просто сформулируйте обычное рекуррентное соотношение ...
Обозначьте минимальную стоимость, достижимую с общим весом k, как Min_cost (k).
Загрузите мемоизацию с помощью:
Min_cost(0) = cost of empty set = 0
Затем решите вопрос об увеличении значений k, используя:
Min_cost(i+1) = min [Min_cost(i) + min [ci, for all items with wi = 1],
Min_cost(i-1) + min [ci, for all items with wi = 2],
Min_cost(i-2) + min [ci, for all items with wi = 3],
...
Min_cost(2) + min [ci, for all items with wi = w-1],
Min_cost(1) + min [ci, for all items with wi = w],
Min_cost(0) + min [ci, for all items with wi = w+1]]
person
Rahul Banerjee
schedule
17.03.2013
И если нет элементов с текущим wi, как мне в этом случае найти min [ci, для всех элементов с wi = 1]? И, например, W = 100 и 2 типа элементов: w1 = 1 c1 = 1; w2 = 50 c2 = 30, поэтому здесь ответ должен быть 60, и я не могу получить его с помощью вашего алгоритма. Вы можете лучше объяснить свою идею?
- person user2178460; 17.03.2013
Если нет элемента с wi = 1, у вас не может быть строки
Min_cost(i) + min [ci, for all items with wi = 1
в повторении, поскольку эти элементы не существуют. Что касается нескольких монет одного типа, существует ли бесконечное количество каждой из них? Если это так, отношение повторения будет выбирать только c1, пока вы не вычислите Min_cost (50), после чего оно переключится на c2, потому что Min_cost(50) = min[ Min_cost(49) + c1, Min_cost(0) + c2] = min[49 + 1, 0 + 30] = 30
. При W = 90 вы получите Min_cost (100) = 60. Кстати, это похоже на назначение алгоритмов ... надеюсь, вы не используете StackOverflow для домашнего задания :)
- person Rahul Banerjee; 17.03.2013