Мне нужно написать грубую реализацию задачи о рюкзаке. Вот псевдокод:
computeMaxProfit(weight_capacity)
max_profit = 0
S = {} // Each element of S is a weight-profit pair.
while true
if the sum of the weights in S <= weight_capacity
if the sum of the profits in S > max_profit
update max_profit
if S contains all items // Then there is no next subset to generate
return max
generate the next subset S
Хотя алгоритм довольно прост в реализации, я не имею ни малейшего представления о том, как генерировать набор мощностей S и передавать подмножества набора мощностей в каждую итерацию цикла while.
Моя текущая реализация использует список пар для хранения веса и прибыли предмета:
list< pair<int, int> > weight_profit_pair;
И я хочу сгенерировать набор мощности этого списка для моей функции calculateMaxProfit. Существует ли алгоритм для создания подмножеств списка? Является ли список подходящим контейнером для использования?