ผมเคยถามคำถามนี้ในกองมากเกินขณะที่ผ่านมา: ขายของบ๊อบ: ปัญหา มีคนแนะนำการโพสต์คำถามที่นี่เช่นกัน
มีคนถามคำถามเกี่ยวกับปัญหานี้แล้ว - น้ำหนักต่ำสุดย่อยของ cardinality ที่กำหนด - แต่เท่าที่ฉันเข้าใจมันไม่ได้ช่วยฉันด้วยปัญหาของฉัน คำตอบที่ได้รับคะแนนสูงสุดใน StackOverflow ก็ควรพิจารณาเช่นกัน
ต่อไปนี้เป็นคำต่อคำของคำถาม StackOverflow ของฉัน อาจเป็นสูตรที่ไม่เหมาะสมสำหรับไซต์นี้ (เฮ้ฉันรู้สึกว่าไม่ได้รับการศึกษาเพียงแค่ขอจากที่นี่) ดังนั้นอย่าลังเลที่จะแก้ไข:
หมายเหตุ: นี่เป็นคำพูดที่เป็นนามธรรมของปัญหาชีวิตจริงเกี่ยวกับการสั่งซื้อบันทึกในไฟล์ SWF โซลูชันจะช่วยฉันปรับปรุงแอปพลิเคชันโอเพนซอร์ซ
Bob มีร้านค้าและต้องการขายสินค้า ร้านค้าของเขามีสินค้าจำนวนหนึ่งและเขามีหน่วยเป็นจำนวนเต็มจำนวนหนึ่งของแต่ละผลิตภัณฑ์ในสต็อก นอกจากนี้เขายังมีป้ายราคาติดตั้งบนชั้นวางจำนวนมาก (มากที่สุดเท่าที่จำนวนผลิตภัณฑ์) โดยมีการพิมพ์ราคาลงบนพวกเขา เขาสามารถวางป้ายราคาใด ๆ ในผลิตภัณฑ์ใด ๆ (ราคารวมสำหรับหนึ่งรายการสำหรับสินค้าทั้งหมดของเขาของผลิตภัณฑ์นั้น) แต่สินค้าบางอย่างมีข้อ จำกัด เพิ่มเติม - ผลิตภัณฑ์ดังกล่าวอาจไม่ถูกกว่าผลิตภัณฑ์อื่นบางอย่าง
คุณต้องหาวิธีจัดเรียงป้ายราคาเช่นว่าค่าใช้จ่ายโดยรวมของสินค้าทั้งหมดของบ๊อบต่ำที่สุดเท่าที่จะเป็นไปได้ ต้นทุนรวมคือผลรวมของป้ายราคาที่กำหนดของแต่ละผลิตภัณฑ์คูณด้วยปริมาณของผลิตภัณฑ์นั้นในสต็อก
ได้รับ:
- N - จำนวนของผลิตภัณฑ์และป้ายราคา
- S i , 0≤ i <N - ปริมาณสินค้าในสต็อคที่มีดัชนีi (จำนวนเต็ม)
- P j , 0≤ j <N - ราคาบนฉลากราคาพร้อมดัชนีj (จำนวนเต็ม)
- K - จำนวนคู่ข้อ จำกัด เพิ่มเติม
- A k , B k , 0≤ k <K - ดัชนีผลิตภัณฑ์สำหรับข้อ จำกัด เพิ่มเติม
- ดัชนีผลิตภัณฑ์ใด ๆ อาจปรากฏขึ้นหนึ่งครั้งใน B ดังนั้นกราฟที่เกิดขึ้นจากรายการ adjacency นี้เป็นชุดของต้นไม้ที่กำกับ
โปรแกรมจะต้องค้นหา:
- 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 <10,000 ในปัญหาในชีวิตจริงมีแท็กราคาที่แตกต่างกันเพียงไม่กี่ (1,2,3,4)
นี่คือตัวอย่างหนึ่งว่าทำไมโซลูชั่นที่ง่ายที่สุด (รวมถึงการจัดเรียงโทโพโลยี) ไม่ทำงาน:
ทางออกที่ดีที่สุดคือ:
Price, $ 1 2 3 4 5 6 7 8 9 10
Qty 9 8 7 6 1 10 5 4 3 2