2
“ ปัญหาการหยิบพิซซ่า” แก้ไขได้อย่างไรโดยใช้เทคนิคการเขียนโปรแกรมแบบไดนามิก?
ปัญหาการเลือกพิซซ่าของ Winkler: พายพิซซ่าวงกลมของnชิ้นที่ชิ้นiมีพื้นที่S_iเช่นพื้นที่ที่แตกต่างกันสำหรับแต่ละชิ้นพาย ผู้เสพอลิซและบ๊อบผลัดกันหยิบชิ้น แต่มันหยาบคายที่จะสร้างช่องว่างหลายแห่งในวงกลม (พิจารณาว่าไม่ได้รับอนุญาต) ดังนั้นผู้กินแต่ละคนจะถูก จำกัด ให้รับหนึ่งในสองชิ้นติดกับพื้นที่เปิด อลิซไปก่อนแล้วผู้เสพทั้งคู่หาทางพายให้ได้มากที่สุด อัลกอริธึมการเขียนโปรแกรมแบบไดนามิกจะกำหนดได้อย่างไรว่าอลิซพายกินอย่างไรถ้าทั้งอลิซและบ๊อบเล่นได้อย่างสมบูรณ์แบบเพื่อเพิ่มการใช้พิซซ่าให้ได้มากที่สุด? ความเข้าใจของฉัน: ในปัญหา DP ทั่วไปเราดำเนินการต่อไปด้วยการค้นหาปัญหาย่อยซึ่งสามารถมองเห็นได้โดยใช้แผนผังการเรียกซ้ำหรือใช้ DAG ให้แน่นขึ้น ที่นี่ฉันไม่พบโอกาสในการค้นหาปัญหาย่อยที่นี่ ที่นี่สำหรับชุด S_i s หนึ่งชุดเราต้องเพิ่มพื้นที่ส่วนที่กินโดย Alice ให้มากที่สุด สิ่งนี้จะขึ้นอยู่กับการเลือกวิธีเรียงสับเปลี่ยนชิ้นพิซซ่า (n-1) เรียงสับเปลี่ยน การเลือกชิ้นส่วนพื้นที่สูงสุดจากสองตัวเลือกที่มีอยู่ในทุก ๆ n \ 2 ทำให้อลิซได้รับแล้วจะให้พื้นที่ทั้งหมดของชิ้นเพื่อเปลี่ยนรูป เราจำเป็นต้องค้นหาพื้นที่ของชิ้นสำหรับการเรียงสับเปลี่ยนทั้งหมด แล้วค่าสูงสุดจากสิ่งเหล่านี้ ใครสามารถช่วยฉันในการก้าวไปข้างหน้า?