ฉันเจอปัญหาที่เป้าหมายคือการใช้การเขียนโปรแกรมแบบไดนามิก (แทนที่จะเป็นวิธีการอื่น) มีระยะห่างที่จะขยายและชุดสายเคเบิลที่มีความยาวต่างกัน จำนวนสายเคเบิลขั้นต่ำที่ต้องใช้ในการขยายระยะทางคือเท่าไหร่?
สำหรับฉันนี่ดูเหมือนปัญหาเป้แต่เนื่องจากอาจมีทวีคูณของความยาวที่เฉพาะเจาะจงมันเป็นปัญหาเครื่องหลังที่ถูกผูกไว้แทนที่จะเป็นปัญหาเครื่องหลัง 0/1 (รักษาคุณค่าของแต่ละรายการให้เป็นน้ำหนักของมัน) การใช้วิธีการที่ไร้เดียงสา (และไม่สนใจเกี่ยวกับการขยายพื้นที่การค้นหา) วิธีที่ฉันใช้ในการแปลงปัญหาเป้สะพายหลังเป็นปัญหา 0/1 เป้เพียงแค่ แยกหลายรายการเป็นซิงเกิ้ลและใช้อัลกอริทึมการเขียนโปรแกรมแบบไดนามิกที่รู้จักกันดี น่าเสียดายสิ่งนี้นำไปสู่ผลลัพธ์ที่ดีที่สุดย่อย
ตัวอย่างเช่นสายเคเบิลที่กำหนด:
1 x 10ft,
1 x 7ft,
1 x 6ft,
5 x 3ft,
6 x 2ft,
7 x 1ft
หากระยะห่างเป้าหมายคือ 13ft อัลกอริทึม DP เลือก 7 + 6 เพื่อขยายระยะทาง อัลกอริทึมโลภน่าจะเลือกได้ 10 + 3 แต่มันก็คือความเสมอภาคสำหรับจำนวนสายเคเบิลขั้นต่ำ ปัญหาเกิดขึ้นเมื่อพยายามขยาย 15 ฟุต อัลกอริทึม DP จบลงด้วยการเลือก 6 + 3 + 3 + 3 เพื่อรับสายเคเบิล 4 ในขณะที่อัลกอริทึมโลภเลือก 10 + 3 + 2 สำหรับ 3 สายเท่านั้น
อย่างไรก็ตามทำการสแกนแบบเบา ๆ ของการแปลงที่มีขอบเขตเป็น 0/1 ดูเหมือนว่าวิธีการที่รู้จักกันดีในการแปลงหลายรายการเป็น {p, 2p, 4p ... } คำถามของฉันคือการแปลงนี้ทำงานอย่างไรถ้า p + 2p + 4p ไม่ได้เพิ่มจำนวนหลายรายการ ตัวอย่างเช่น: ฉันมีสาย 3ft 5 ฟุต ฉันเพิ่ม {3, 2x3, 4x3} ไม่ได้เพราะ 3 + 2x3 + 4x3> 5x3 ฉันควรเพิ่ม {3, 4x3} แทนหรือไม่
[ฉันกำลังพยายามที่จะห้อมล้อมกระดาษ "ปัญหา Trail Trail โอเรกอน" แต่ขณะนี้ดูเหมือนว่าวิธีการที่ใช้ไม่มีการเขียนโปรแกรมแบบไดนามิก]