Ich habe diese Frage vor einiger Zeit bei Stack Overflow gestellt: Problem: Bobs Verkauf . Jemand schlug vor, die Frage auch hier zu posten.
Jemand hat hier bereits eine Frage zu diesem Problem gestellt - Unterwald mit minimalem Gewicht und gegebener Kardinalität -, aber soweit ich das verstehe, hilft es mir bei meinem Problem nicht. Die bestbewertete Antwort auf StackOverflow ist ebenfalls einen Blick wert.
Hier ist die wörtliche Kopie meiner StackOverflow-Frage. Es ist wahrscheinlich nicht ausreichend für diese Site formuliert (zum Teufel, ich fühle mich nicht ausreichend ausgebildet, wenn ich es hier frage), also zögern Sie nicht, es zu bearbeiten:
Hinweis: Dies ist eine abstrakte Umformulierung eines realen Problems beim Bestellen von Datensätzen in einer SWF-Datei. Eine Lösung hilft mir, eine Open-Source-Anwendung zu verbessern.
Bob hat ein Geschäft und möchte etwas verkaufen. Sein Geschäft führt eine Reihe von Produkten, und er hat eine bestimmte ganzzahlige Anzahl von Einheiten von jedem Produkt auf Lager. Er hat auch eine Reihe von Preisschildern auf dem Regal (so viele wie Produkte), auf denen die Preise bereits gedruckt sind. Er kann auf jedem Produkt ein beliebiges Preisschild anbringen (Einheitspreis für einen Artikel für den gesamten Lagerbestand dieses Produkts). Einige Produkte unterliegen jedoch einer zusätzlichen Einschränkung - ein solches Produkt ist möglicherweise nicht billiger als ein bestimmtes anderes Produkt.
Sie müssen herausfinden, wie Sie die Preisschilder so anordnen, dass die Gesamtkosten aller Waren von Bob so niedrig wie möglich sind. Die Gesamtkosten sind die Summe der zugewiesenen Preisschilder der einzelnen Produkte, multipliziert mit der Menge des auf Lager befindlichen Produkts.
Gegeben:
- N - Anzahl der Produkte und Preisschilder
- S i , 0≤ i <N - die auf Lager befindliche Menge des Produkts mit dem Index i (Ganzzahl)
- P j , 0≤ j <N - der Preis auf dem Preisschild mit dem Index j (ganze Zahl)
- K - die Anzahl der zusätzlichen Bedingungspaare
- A k , B k , 0 ≤ k <K - Produktindizes für die zusätzliche Bedingung
- Jeder Produktindex darf in B höchstens einmal vorkommen. Das durch diese Adjazenzliste gebildete Diagramm ist also tatsächlich eine Menge gerichteter Bäume.
Das Programm muss finden:
- M i , 0 ≤ i <N - Zuordnung vom Produktindex zum Preisetikettenindex (P M i ist der Preis des Produkts i )
Um die Bedingungen zu erfüllen:
- P M A k ≤ P M B k , für 0 ≤ k <K
- Σ (n i · P M i ) für 0≤ i <N ist minimal
Beachten Sie, dass die Lösung ohne die erste Bedingung darin besteht, die Etiketten einfach nach Preis und die Produkte nach Menge zu sortieren und beide direkt abzugleichen.
Typische Werte für die Eingabe sind N, K <10000. In der Realität gibt es nur verschiedene Preisschilder (1,2,3,4).
Hier ist ein Beispiel, warum die meisten einfachen Lösungen (einschließlich der topologischen Sortierung) nicht funktionieren:
Die optimale Lösung ist:
Price, $ 1 2 3 4 5 6 7 8 9 10
Qty 9 8 7 6 1 10 5 4 3 2