Там у меня есть код, который вычисляет оптимальное значение по алгоритму рюкзака (сложная задача упаковки бина, сложная задача):
int Knapsack::knapsack(std::vector<Item>& items, int W)
{
size_t n = items.size();
std::vector<std::vector<int> > dp(W + 1, std::vector<int>(n + 1, 0));
for (size_t j = 1; j <= n; j++)
{
for ( int w = 1; w <= W; w++)
{
if (items[j-1].getWeight() <= w)
{
dp[w][j] = std::max(dp[w][j-1], dp[w - items[j-1].getWeight()][j-1] + items[j-1].getWeight());
}
else
{
dp[w][j] = dp[w][j - 1];
}
}
}
return dp[W][n];
}
Также мне нужно показать элементы, включенные в упаковку.Я хочу создать массив, чтобы поместить туда добавленные элементы.Таким образом, вопрос в том, на какой шаг поставить это дополнение, или, может быть, есть какой-нибудь более эффективный способ сделать это?
Вопрос: Я хочу быть в состоянии узнать, какие элементы даютМне оптимальное решение, а не только стоимость лучшего решения.
PS.Извините за мой английский, это не мой родной язык.