คำถามติดแท็ก dynamic-programming

4
คุณระบุปัญหาว่าเหมาะสำหรับการเขียนโปรแกรมแบบไดนามิกอย่างไร
ฉันได้อ่านการเขียนโปรแกรมแบบไดนามิกเมื่อเร็ว ๆ นี้ อยากได้ยินจากคนที่เริ่มต้นจากศูนย์และตอนนี้ก็ค่อนข้างดีในการระบุและแก้ไขปัญหา DP ฉันกำลังดิ้นรนในการระบุปัญหาเหล่านี้เป็น DP และกำหนดวิธีการแก้ปัญหาที่รัดกุม ฉันได้ผ่านปัญหา DP ส่วนใหญ่สำหรับผู้เริ่มต้นและทรัพยากร MIT แล้ว

3
จำนวนสตริงเมื่อแต่ละตัวละครจะต้องเกิดขึ้นแม้แต่ครั้ง
ฉันตีหัวกะโหลกที่ปัญหานี้มาระยะหนึ่งแล้วและมันเริ่มทำให้ฉันหงุดหงิดจริงๆ ปัญหาคือ: ฉันมีชุดของตัวอักษร, A, B, และC Dฉันต้องบอกว่าสตริงสามารถสร้างจากตัวละครเหล่านี้ได้กี่วิธีเมื่อความยาวเป็นnและตัวละครแต่ละตัวจะต้องเกิดขึ้นซ้ำ ๆ ตัวอย่างเช่นคำตอบสำหรับn = 2คือ 4: AA BB CC DD คำตอบn = 4คือ 40 สตริงที่ใช้ได้บางส่วนคือ: AAAA AABB CACA DAAD BCCB ฉันติดอยู่กับตรรกะ ฉันรู้สึกว่าอาจมีวิธีแก้ปัญหา DP สำหรับสิ่งนี้ การบังคับให้ฉันผ่านสิ่งนี้ออกมาจากคำถาม: จำนวนโซลูชันเติบโตอย่างรวดเร็วเป็นจำนวนมหาศาล ฉันได้ลองวาดไอเดียต่าง ๆ ลงบนกระดาษแล้วก็ไม่มีประโยชน์ ฉันต้องทิ้งความคิดเหล่านั้นเกือบทั้งหมดเนื่องจากความซับซ้อนของมันใหญ่เกินไป n = 10^4การแก้ปัญหาควรจะมีประสิทธิภาพสำหรับ หนึ่งในความคิดของฉันคือไม่ต้องติดตามสายอักขระที่แท้จริง แต่เฉพาะว่าตัวละครแต่ละตัวนั้นปรากฏตัวหรือแม้แต่ช่วงเวลาคี่ ฉันไม่สามารถหาวิธีที่จะใช้ตรรกะนี้ได้ มีใครช่วยฉันบ้าง

2
วิธีการแก้ไขปัญหาการเขียนโปรแกรมแบบไดนามิกให้ดีขึ้น
ฉันเพิ่งเจอคำถามนี้: "คุณจะได้รับนิพจน์บูลีนประกอบด้วยสตริงของสัญลักษณ์ 'จริง', 'เท็จ', 'และ', 'หรือ' และ 'และ' xor 'นับจำนวนวิธีในการวงเล็บ นิพจน์เช่นนั้นจะประเมินเป็นจริงตัวอย่างเช่นมีสองวิธีในการวงเล็บ 'true และ false xor true' ซึ่งจะประเมินค่าเป็นจริง " ฉันรู้ว่ามันเป็นปัญหาการเขียนโปรแกรมแบบไดนามิกดังนั้นฉันจึงพยายามหาวิธีแก้ปัญหาด้วยตัวเองซึ่งมีดังต่อไปนี้ สมมติว่าเรามีการแสดงออกเป็น ABC .... D '' ที่ไหน แสดงถึงการดำเนินการใด ๆ และหรือหรือ xor และตัวอักษรพิมพ์ใหญ่แสดงถึงความจริงหรือเท็จ ให้บอกว่าหลายวิธีสำหรับการแสดงออกของขนาด K นี้ที่จะสร้างความจริงคือ N. เมื่อเพิ่มค่าบูลีนใหม่ E ในการแสดงออกนี้มี 2 วิธีในการวงเล็บการแสดงออกใหม่นี้ 1 (ABC .... D) .E) เช่น ด้วยวงเล็บที่เป็นไปได้ทั้งหมดของ ABC .... เราเพิ่ม E …

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