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