如何使用背包算法[不仅仅是袋子的价值]查找袋子中的哪些元素?

我有一个代码,该代码通过背包算法(bin pack NP-hard问题)计算出最佳值:


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。对不起,我的英语不是我的母语。


海绵宝宝撒
浏览 539回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP