Я думал,
Я хотел сделать вариацию по проблеме с ранцем.
Представьте себе оригинальную задачу с предметами разного веса / стоимости.
Моя версия, наряду с обычными весами / значениями, будет содержать значение "group".
например.
Item1 [5 кг, $ 600, электронное]
Item2 [1 кг, 50 $, еда]
Теперь, имея такой набор предметов, как бы я закодировал проблему с рюкзаком, чтобы убедиться, что выбран максимум 1 предмет из каждой «группы».
Примечания:
- Вам не нужно выбирать предмет из этой группы
- В каждой группе несколько предметов
- Вы по-прежнему минимизируете вес, максимизируете значение
- Количество групп задано вместе с их значениями.
На этой стадии я просто пишу черновик кода и решил использовать динамический подход. Я понимаю идею, лежащую в основе динамического решения обычной задачи о ранце, как мне изменить это решение, чтобы включить эти «группы»?
KnapSackVariation(v,w,g,n,W)
{
for (w = 0 to W)
V[0,w] = 0;
for(i = 1 to n)
for(w = 0 to W)
if(w[i] <= w)
V[i,w] = max{V[i-1, w], v[i] + V[i-1, w-w[i]]};
else
V[i,w] = V[i-1, w];
return V[n,W];
}
Это то, что у меня есть, нужно добавить его, чтобы он удалял все соответствующие элементы из группы, в которой он находится каждый раз, когда решает эту проблему.