私は少し前にStack Overflowでこの質問をしました:問題:Bob's sale。誰かが質問をここに投稿することも提案しました。
誰かがすでにこの問題に関連する質問をしています- 特定のカーディナリティの最小重みサブフォレスト -しかし、私が理解している限り、それは私の問題に役立ちません。StackOverflowで最も評価の高い回答もご覧ください。
StackOverflowの質問の逐語的なコピーを次に示します。おそらく、このサイトには不適切に定式化されているので(ちなみに、ここで質問するだけでは教育を受けられないと感じます)、自由に編集してください。
注:これは、SWFファイル内のレコードの順序に関する実際の問題を抽象的に言い換えたものです。ソリューションは、オープンソースアプリケーションの改善に役立ちます。
ボブは店を持ち、販売をしたいと考えています。彼の店には多くの製品があり、在庫がある各製品の単位の特定の整数量を持っています。彼はまた、多くの棚に取り付けられた価格ラベル(製品の数と同じ数)を持ち、価格はすでに印刷されています。彼はどの製品にも価格ラベルを付けることができます(その製品の在庫全体に対する1つのアイテムの単価)。ただし、一部の製品には追加の制限があります。
すべてのBobの製品の総コストが可能な限り低くなるように、価格ラベルを配置する方法を見つける必要があります。総コストは、各製品に割り当てられた価格ラベルにその製品の在庫数を掛けた合計です。
与えられた:
- N –製品と価格ラベルの数
- S I、0≤ I <N -インデックスを有する製品の在庫の数量I(整数)
- PのJ、0≤ J <N -インデックス付き価格ラベル上の価格J(整数)
- K –追加の制約ペアの数
- K、BはK、0≤ K <K -追加の制約のために、製品インデックス
- どの製品インデックスもBに1回しか表示されません。したがって、この隣接リストによって形成されるグラフは、実際には有向木のセットです。
プログラムは以下を見つける必要があります。
- M I、0≤ I <N -価格ラベルインデックス製品インデックスからマッピング(P M iは、製品の価格であるI)
条件を満たすには:
- P M A K ≤P M BがK、0≤ためのK <K
- Σ(S I ×P M I 0≤ため)、I <Nが最小であります
最初の条件でない場合、ソリューションは、価格でラベルをソートし、数量で製品をソートし、両方を直接照合することに注意してください。
入力の一般的な値はN、K <10000です。現実の問題では、いくつかの異なる価格タグ(1,2,3,4)のみがあります。
最も単純なソリューション(トポロジカルソートを含む)が機能しない理由の1つの例を次に示します。
あなたは価格で10個の数量を持つ項目1から10、及び10枚の価格ラベル持つ 1から$数量1でのアイテムよりも安くしてはならないアイテム数量10と:1つの条件があります10。
最適なソリューションは次のとおりです。
Price, $ 1 2 3 4 5 6 7 8 9 10
Qty 9 8 7 6 1 10 5 4 3 2
合計コストは249 です。1,10ペアをどちらかの極値に近づけると、合計コストは高くなります。