В то время как стандартная проблема с рюкзаком может быть решена путем динамического программирования, я пытаюсь немного перекрутить проблему, чтобы очистить мою концепцию, однако мне показалось, что это может быть сложнее, чем я думал.Рюкзак с взаимоисключающими изделиями
Оригинальная задача о рюкзаке является то, что данный ранец с размером W
и список предметов, вес которых w[i]
и имеет значение v[i]
, найти подмножество предметов, которые могут поместиться в рюкзаке с самой высокой общей стоимостью.
Для меня это может быть сделано O(Wn)
с динамическим программированием, где n
- это количество элементов.
Теперь, если я пытаюсь добавить m
Сдерживает, каждый из них является пара элементов, которые могут быть выбраны только взаимное исключительно (т.е. если существует Ограничить из пункта А и пункт Б, то я могу взять только либо один из них, но не оба)
При таких ограничениях эта проблема может быть решена путем динамического программирования в O(Wn)
?
Все еще переваривается, но звучит очень хорошо для меня ... просто для того, чтобы очистить мой разум, означает ли это, если каждый ограничитель не является парой, а набором элементов, каждый из которых должен быть взаимоисключающим, что все еще может быть использовал аналогичный алгоритм, который имеет время O (Wn)? – shole
@shole Пока ограничения не перекрываются (ни один элемент не присутствует в более чем одном ограничении), этот подход может быть расширен до нескольких элементов в ограничениях. –
Спасибо, я пытаюсь реализовать простой код, используя эту концепцию, приму его как можно скорее, как только закончу его ... – shole