+-ナップザック問題


9

それぞれに重みと値が設定されたアイテムのセットを前提として、コレクションに含める各アイテムの数を決定します。これにより、合計の重みが特定の制限以下になり、合計値ができるだけ大きくなります。

詳細についてはウィキペディア

たとえば、最大重みを15、値/質量が最大のオブジェクトを指定すると、スコアが36の場合に7つのオブジェクトと1 つのオブジェクト[5,2], [7,4] [1,1]が出力さ[7,0,1]れます。[5 <value>, 2 <mass>][1 <value>, 1 <mass>]

ルール

入力は適切な形式で取得できます

出力も柔軟な形式で、

非標準のライブラリを使用することはできません。初期セットアップとは別に使用するためにライブラリをインストールまたはダウンロードする必要がある場合、それは許可されていません

オブジェクトは負の質量と値を持つ可能性があります(つまり、-1、-1)

最適な回答が必要です

勝利

最短コードの勝利

負の質量と値?

これは、この課題の重要な部分です。などのアイテム(質量、値)を持つオブジェクトと[4,3],[-1,-1]、容量が15のバッグがあるとします。最初のアイテムの3つを入れてスコアを9にするか、最初のアイテムの4つと-1、-1の1つを入れます。スコア11のオブジェクト。



非正の質量を持つ物体はないと想定できますか?
HyperNeutrino

@HyperNeutrino編集のために1秒削除
Christopher

2
すべてが整数であると仮定できますか?また、[[2、1]、[-1、-1]]のように、合計値を任意に大きくできるケースに対処する必要がありますか?

5
タイトルは誤解を招くものです。負の重みのため、これはナップザック問題ではなく、線形計画問題のバリエーションです。
ngn 2018

回答:


2

Pyth、18バイト

h.MshMZfghQseMTy*F

[値、重み]のペアのリストとして出力します。恐ろしく非効率的ですが、NP 完全です。
ここで試してください

説明

h.MshMZfghQseMTy*F
               y*FQ  Get all sets with up to <capacity> of each item.
       fghQseMT      Choose the sets whose total weight fits in the bag.
 .MshMZ              Choose those with the highest value.
h                    Take the first.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.