私が考えていた、
ナップサック問題のバリエーションを作りたかったのです。
さまざまな重み/値を持つアイテムを使用した元の問題を想像してみてください。
私のバージョンには、通常の重み/値とともに、「グループ」値が含まれます。
例えば。Item1 [5kg、$ 600、電子] Item2 [1kg、$ 50、食品]
さて、このようなアイテムのセットがあるので、ナップサック問題をどのようにコード化して、各「グループ」から最大1つのアイテムが選択されるようにしますか。
ノート:
- そのグループからアイテムを選択する必要はありません
- 各グループには複数のアイテムがあります
- あなたはまだ体重を最小化し、価値を最大化しています
- グループの数は、それらの値とともに事前定義されています。
この段階でコードのドラフトを作成しているところですが、動的なアプローチを使用することを選択しました。通常のナップサック問題の動的ソリューションの背後にある考え方を理解していますが、これらの「グループ」を組み込むためにこのソリューションを変更するにはどうすればよいですか?
KnapSackVariation(v,w,g,n,W)
{
for (w = 0 to W)
V[0,w] = 0;
for(i = 1 to n)
for(w = 0 to W)
if(w[i] <= w)
V[i,w] = max{V[i-1, w], v[i] + V[i-1, w-w[i]]};
else
V[i,w] = V[i-1, w];
return V[n,W];
}
それは私がこれまでに持っているものです、それがこれを解決するたびにそれがいるグループからすべての対応するアイテムを削除するようにそれを追加する必要があります。