の一定量を持つ人々に与えられたコストで、すべてのアイテムを販売することは可能です最近、私は、私は、以下のアルゴリズムのタスクとしてrefolmulateことができ、本当の問題に遭遇した:は、それはお金
問題:
を集合が与えられます多少の金額を持っているN
の人物とM
個のアイテムのセットは、それぞれ多少の費用がかかりますが、すべてのアイテムを売ることは可能ですか?
各アイテムは最大で1人で購入する必要があり、各人は複数のアイテムを購入することができ、そのコストは彼の持つ金額を超えないようにすることができます。
マイ未遂ソリューション:
私はネットワークを構築し、このような最大の流れを見つけるの方向に考えていた:
- 人に対応する部分に頂点を持つbipartideグラフを作成し、他の部分で - アイテムに。
- 人をソースS
に接続し、人の金額にエッジ容量を設定します。
- アイテムをシンクT
に接続し、エッジの容量をアイテムコストに設定します。
- 購入可能なアイテムに各人を接続し、アイテムのコストにエッジキャパシティを設定する
このネットワークで見つかった最大フローの各エッジが空であるか完全に飽和している場合、 T
に行くすべてのエッジが飽和している場合、誰がどのアイテムを購入すべきかを知りたければ、左と右のパートの間のエッジを見ます。
しかし、問題は、フローに部分的に塗りつぶされたエッジが含まれている可能性があることです(人が部分的に一部の商品を支払ったことを意味します)。この場合、私は排除できません。