Там у меня есть код, который вычисляет оптимальное значение по алгоритму knapsack (NP-жесткая задача bin pack):
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. Извините за мой английский, это не мой родной язык.