Есть два хорошо известные проблемы ранцевых:Решения ранца с дробным рюкзаком подходом
1) Учитывая n
элементов, каждый из них имеет свою weight
и cost
. Нам нужно выбрать предметы, которые будут вписываться в наш рюкзак и иметь максимальную стоимость в сумме. Его можно легко решить, используя dynamic programming
.
2) Дробный рюкзак: тот же, что и первый, но мы можем взять не весь товар, а его часть. Эта проблема может быть легко решена с помощью greedy algorithm
.
Представьте, что мы используем greedy algorithm
из второй проблемы для решения первой задачи. Как я могу доказать, что решение, которое мы получим, не более чем в два раза хуже, чем оптимальное?
Что значит «хуже»? –
У вас, вероятно, больше ограничений, так как общий случай (вес, стоимость - это двойные значения, а не просто значения int) не так удобен для DP –
@ Александр Аникин: 'int' is * не является ограничением * - просто * масштабировать * мой ответ - рюкзак с объемом '1e100'; item 'A' с' weight = 1' и 'cost = 1' и item' B' с 'weight = 1e100' и стоимостью' 1e100-1' –