Saya telah menanyakan pertanyaan ini pada Stack Overflow beberapa waktu lalu: Masalah: Penjualan Bob . Seseorang menyarankan untuk mengirim pertanyaan di sini juga.
Seseorang telah mengajukan pertanyaan terkait dengan masalah ini di sini - Berat minimum hutan hujan dari kardinalitas yang diberikan - tetapi sejauh yang saya mengerti itu tidak membantu saya dengan masalah saya. Jawaban dengan nilai tertinggi di StackOverflow juga patut dilihat.
Inilah salinan kata demi kata dari pertanyaan StackOverflow saya. Ini mungkin tidak diformulasikan secara memadai untuk situs ini (heck, saya merasa tidak cukup hanya bertanya di sini), jadi silakan mengeditnya:
Catatan: ini adalah penulisan ulang abstrak dari masalah kehidupan nyata terkait pemesanan catatan dalam file SWF. Sebuah solusi akan membantu saya meningkatkan aplikasi open-source.
Bob memiliki toko, dan ingin melakukan penjualan. Tokonya membawa sejumlah produk, dan dia memiliki jumlah unit integer tertentu dari setiap produk dalam stok. Dia juga memiliki sejumlah label harga yang dipasang di rak (sebanyak jumlah produk), dengan harga sudah tercetak di atasnya. Dia dapat menempatkan label harga pada produk apa pun (harga kesatuan untuk satu item untuk seluruh stok produk itu), namun beberapa produk memiliki batasan tambahan - produk semacam itu mungkin tidak lebih murah daripada produk lain tertentu.
Anda harus menemukan cara mengatur label harga, sehingga biaya total semua barang Bob serendah mungkin. Total biaya adalah jumlah dari label harga masing-masing produk yang dikalikan dengan jumlah produk dalam stok.
Diberikan:
- N - jumlah produk dan label harga
- S i , 0≤ i <N - jumlah dalam stok produk dengan indeks i (integer)
- P j , 0≤ j <N - harga pada label harga dengan indeks j (integer)
- K - jumlah pasangan kendala tambahan
- A k , B k , 0≤ k <K - indeks produk untuk kendala tambahan
- Setiap indeks produk dapat muncul paling banyak sekali dalam B. Dengan demikian, grafik yang dibentuk oleh daftar kedekatan ini sebenarnya adalah seperangkat pohon diarahkan.
Program harus menemukan:
- M i , 0≤ i <N - pemetaan dari indeks produk ke indeks label harga (P M i adalah harga produk i )
Untuk memenuhi persyaratan:
- P M A k ≤ P M B k , untuk 0≤ k <K
- Σ (S i × P M i ) untuk 0≤ i <N minimal
Perhatikan bahwa jika tidak untuk kondisi pertama, solusinya hanya akan menyortir label berdasarkan harga dan produk berdasarkan kuantitas, dan mencocokkan keduanya secara langsung.
Nilai tipikal untuk input adalah N, K <10000. Dalam masalah kehidupan nyata, hanya ada beberapa label harga yang berbeda (1,2,3,4).
Inilah salah satu contoh mengapa solusi paling sederhana (termasuk jenis topologi) tidak berfungsi:
Solusi optimal adalah:
Price, $ 1 2 3 4 5 6 7 8 9 10
Qty 9 8 7 6 1 10 5 4 3 2