があり、私はナップザックアルゴリズム(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。私の英語は申し訳ありませんが、私の母国語ではありません。
それは理解することが少し難しいですあなたの質問ですが、最適なソリューションの価値だけでなく、最適なソリューションを提供するアイテムを知りたいと思っていますか? –
はい、絶対に正しいです。 – prvit