Я думал,
Я хотел сделать вариацию на тему проблемы рюкзака.
Представьте себе первоначальную проблему с предметами с различным весом / стоимостью.
Моя версия, наряду с нормальными весами/значениями, будет содержать значение «группы».
напр. Пункт1[5кг, $600, электронный] Item2[1kg, $50, food]
Теперь, имея набор таких предметов, как бы я закодировать задачу рюкзака, чтобы убедиться, что выбран максимум 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];
}
Это то, что у меня есть до сих пор, нужно добавить его, чтобы он удалял все соответствующие элементы из группы, в которую он находится каждый раз, когда он решает эту проблему.