Bu soruyu bir süre önce Stack Overflow'da sordum: Sorun: Bob'un satışı . Birisi de soruyu buraya göndermeyi önerdi.
Birisi zaten bu sorunla ilgili bir soru sordu - Verilen kardinalitenin minimum ağırlık alt ormanı - ama anladığım kadarıyla sorunumda bana yardımcı olmuyor. StackOverflow'daki en yüksek cevabı da incelemeye değer.
İşte StackOverflow sorumun kelimesi kelimesine kopyası. Muhtemelen bu site için yetersiz bir şekilde formüle edilmiştir (heck, sadece burada soran yetersiz eğitimsiz hissediyorum), bu yüzden düzenlemek için çekinmeyin:
Not: Bu, bir SWF dosyasındaki kayıtların siparişi ile ilgili gerçek hayat probleminin soyut bir şekilde yeniden yazılmasıdır. Bir çözüm, açık kaynaklı bir uygulamayı geliştirmeme yardımcı olacaktır.
Bob'un bir mağazası var ve bir satış yapmak istiyor. Mağazasında bir dizi ürün var ve stoktaki her bir ürünün belirli bir tamsayı miktarına sahip. Ayrıca, rafa monte edilmiş fiyat etiketlerine (ürün sayısı kadar) sahiptir ve fiyatlar zaten üzerlerinde yazılıdır. Herhangi bir ürüne herhangi bir fiyat etiketi koyabilir (bu ürünün tüm stoğu için bir ürün için birim fiyat), ancak bazı ürünlerin ek bir kısıtlaması vardır - bu tür ürünler diğer belirli bir üründen daha ucuz olmayabilir.
Bob'un tüm mallarının toplam maliyeti mümkün olduğunca düşük olacak şekilde fiyat etiketlerini nasıl ayarlayacağınızı bulmalısınız. Toplam maliyet, her bir ürünün atanmış fiyat etiketinin, stoktaki ürünün miktarıyla çarpımıdır.
Verilen:
- N - ürün ve fiyat etiketi sayısı
- S i , 0≤ i <N - i endeksine sahip ürün stoktaki miktar (tamsayı)
- P j , 0≤ j <N - j endeksi ile fiyat etiketindeki fiyat (tamsayı)
- K - ek kısıtlama çifti sayısı
- A k , B k , 0≤ k <K - ek kısıtlama için ürün endeksleri
- Herhangi bir ürün endeksi B'de en fazla bir kez görünebilir. Bu nedenle, bu bitişiklik listesi tarafından oluşturulan grafik aslında bir dizi yönlendirilmiş ağaçtır.
Program şunları bulmalıdır:
- M i , 0≤ i <N - fiyat etiketi endeksine ürün dizinden haritalama (P M i ürünün fiyatı ise i )
Koşulları karşılamak için:
- P M A k ≤ P M B k , 0≤ k <K için
- Σ (S i × P M i ) için 0≤ i <N minimum
İlk koşul için değilse, çözümün etiketleri fiyat ve ürün miktarına göre sıralaması ve her ikisini de doğrudan eşleştirmesi olacağını unutmayın.
Giriş için tipik değerler N, K <10000 olacaktır. Gerçek hayat probleminde sadece birkaç farklı fiyat etiketi vardır (1,2,3,4).
En basit çözümlerin (topolojik sıralama dahil) neden işe yaramadığına dair bir örnek:
En uygun çözüm:
Price, $ 1 2 3 4 5 6 7 8 9 10
Qty 9 8 7 6 1 10 5 4 3 2