Jakiś czas temu zadałem to pytanie na temat Przepełnienia stosu: Problem: sprzedaż Boba . Ktoś zasugerował także opublikowanie pytania tutaj.
Ktoś już zadał tutaj pytanie związane z tym problemem - minimalna waga lasów danej liczności - ale o ile rozumiem, nie pomaga mi to z moim problemem. Warto również przyjrzeć się najwyżej ocenianej odpowiedzi na StackOverflow.
Oto pełna kopia mojego pytania StackOverflow. Prawdopodobnie jest on nieodpowiednio sformułowany dla tej witryny (cholera, czuję się nieodpowiednio niewykształcony po prostu pytając go tutaj), więc możesz go edytować:
Uwaga: jest to streszczenie przeredagowania rzeczywistego problemu dotyczącego zamawiania rekordów w pliku SWF. Rozwiązanie pomoże mi ulepszyć aplikację typu open source.
Bob ma sklep i chce sprzedać. Jego sklep niesie ze sobą szereg produktów i ma na magazynie pewną liczbę całkowitą sztuk każdego produktu. Ma również wiele etykiet cenowych montowanych na półce (tyle ile produktów), z nadrukowanymi już cenami. Może umieścić dowolną etykietę cenową na dowolnym produkcie (cena jednostkowa za jeden produkt za całe zapasy tego produktu), jednak niektóre produkty podlegają dodatkowym ograniczeniom - każdy taki produkt nie może być tańszy niż określony inny produkt.
Musisz znaleźć sposób ułożenia etykiet cenowych, aby całkowity koszt wszystkich towarów Boba był jak najniższy. Całkowity koszt to suma przypisanej etykiety produktu każdemu produktowi pomnożona przez ilość tego produktu w magazynie.
Dany:
- N - liczba produktów i etykiet cenowych
- S i , 0 ≤ i <N - ilość w magazynie produktu o indeksie i (liczba całkowita)
- P j , 0 ≤ j <N - cena na etykiecie ceny z indeksem j (liczba całkowita)
- K - liczba dodatkowych par wiązań
- A k , B k , 0 ≤ k <K - wskaźniki produktu dla dodatkowego ograniczenia
- Dowolny indeks produktu może pojawić się co najwyżej raz w B. W związku z tym wykres utworzony przez tę listę przylegania jest w rzeczywistości zbiorem ukierunkowanych drzew.
Program musi znaleźć:
- M i , 0 ≤ i <N - odwzorowanie z indeksu produktu na indeks etykiety ceny (P M i to cena produktu i )
Aby spełnić warunki:
- P M A k ≤ P M B k , dla 0 ≤ k <K
- Σ (S i × P M i ) dla 0 ≤ i <N jest minimalne
Pamiętaj, że gdyby nie pierwszy warunek, rozwiązaniem byłoby po prostu sortowanie etykiet według ceny i produktów według ilości oraz bezpośrednie dopasowanie obu.
Typowe wartości wejściowe to N, K <10000. W prawdziwym problemie istnieje tylko kilka różnych cen (1,2,3,4).
Oto przykład, dlaczego najprostsze rozwiązania (w tym sortowanie topologiczne) nie działają:
Optymalne rozwiązanie to:
Price, $ 1 2 3 4 5 6 7 8 9 10
Qty 9 8 7 6 1 10 5 4 3 2