Ну, это старая проблема с рюкзаком 0-1, но после нахождения полной максимальной цены я могу получить, мне нужно найти предметы, которые я могу носить. Но для следующего теста (всего 3 элементы)0-1 Рюкзак пересмотрен
10 (max weight that I can carry)
5 3 (weight and value for each item)
5 2
6 5
Здесь максимальная цена 5. Но для веса это может быть 6
или 10(5+5)
. Оба будут давать одинаковые цены, но, очевидно, целесообразно взять 6 кг товара, чем 10 кг. Я хочу намекнуть, как я могу вычислить это из матрицы dp. Я получил следующую матрицу для этого теста.
0 0 0 0 3 3 3 3 3 3
0 0 0 0 3 3 3 3 3 5
0 0 0 0 3 5 5 5 5 5
Используя этот алгоритм, он находит вес 10, но оптимальный - 6 кг.
i=n, k=W(max weight)// n= total items
while i,k > 0
if dp[i,k] ≠ dp[i−1,k] then
mark the ith item as in the knapsack
i = i−1, k = k-w(weight of ith item)
else
i = i−1
Не могли бы вы объяснить сценарий, в котором мы можем применить бинарный поиск по весам. – Imposter
@Imposter: пусть исходный пакет будет иметь размер 'W', запустите' knapsack (W, items) 'и получите' значение'. Теперь проверьте, сохраняет ли 'knapsack (W/2, items)' значение. если это так - поиск в диапазоне (0, W/2). Если это не так, выполните поиск в диапазоне (W/2, W), пока не найдете наименьший размер мешка, который возвращает значение «значение». это - я добавлю его в ответ. – amit
gotit ... это концепция обрезки, поскольку мы минимизируем входные данные ... – Imposter