ปัญหาการแตกสร้อยคอ
พื้นหลัง ผมได้รับแรงบันดาลใจจาก3Blue1Brown 's ล่าสุดวิดีโอเกี่ยวกับปัญหาสร้อยคอแยก (หรือในขณะที่เขาเรียกมันว่าเป็นปัญหาที่ถูกขโมยสร้อยคอ) และความสัมพันธ์กับทฤษฎีบท Borsuk-ลาม ในปัญหานี้โจรสองคนได้ขโมยสร้อยคอที่มีค่าซึ่งประกอบด้วยอัญมณีหลายประเภท อัญมณีแต่ละชนิดมีจำนวนเท่ากันและพวกโจรต้องการที่จะแยกอัญมณีแต่ละชนิดให้เท่ากันในหมู่พวกเขาสองคน จับเป็นที่พวกเขาจะต้องทำเช่นนั้นโดยการแยกสร้อยเป็นส่วนที่ต่อเนื่องกันจำนวนหนึ่งและกระจายส่วนระหว่างสองของพวกเขา นี่คือตัวอย่างที่มีสี่ประเภทอัญมณีแสดงS, E, DและR(สำหรับไพลินมรกตเพชรและทับทิมตามลำดับ) สมมติว่าสร้อยคอมีดังนี้: [S,S,S,E,S,D,E,R,S,R,E,S,S,S,D,R,E,E,R,E,D,E,R,R,D,E,E,E] มี8ไพลิน, 10มรกต, 4เพชรและ6ทับทิม เราสามารถแยกสร้อยคอดังนี้: [[S],[S],[S,E,S,D,E,R,S],[R,E,S,S,S,D,R,E,E,R,E,D,E],[R,R,D,E,E,E]] จากนั้นถ้าเราให้ส่วนที่หนึ่ง, สามและห้าแก่ขโมยหนึ่งและส่วนที่สองและสี่กับขโมยอื่น ๆ แต่ละอันจะจบลงด้วย4ไพลิน, 5มรกต, 2เพชรและ3ทับทิม: [S], [S,E,S,D,E,R,S], [R,R,D,E,E,E] [S], [R,E,S,S,S,D,R,E,E,R,E,D,E], ใช้0-indexing [1,2,9,22]ตัดเหล่านี้เกิดขึ้นในดัชนี เป้าหมาย ปรากฎว่าแผนกที่เป็นธรรมดังกล่าวสามารถใช้งานได้ทุกครั้งที่มีnการตัดมากที่สุดซึ่งnเป็นประเภทอัญมณีจำนวนเท่าใด งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่สมบูรณ์ซึ่งใช้สร้อยคอเป็นอินพุทและเอาท์พุทการแบ่งน้อยที่สุด (จำนวนการตัดน้อยที่สุด) อินพุต อินพุตอาจอยู่ในรูปแบบที่สะดวก สร้อยคอควรเป็นลำดับของอัญมณีและไม่มีอะไรเพิ่มเติม เช่นรายการจำนวนเต็มพจนานุกรมที่มีกุญแจซึ่งเป็นตัวแทนประเภทอัญมณีและค่าเป็นรายการดัชนี คุณอาจเลือกที่จะรวมความยาวของสร้อยคอหรือจำนวนอัญมณีที่แตกต่างกัน แต่คุณไม่ควรใช้อินพุตอื่น คุณอาจคิดว่าสร้อยคออินพุตนั้นถูกต้อง คุณไม่จำเป็นต้องจัดการกับกรณีที่มีอัญมณีแปลก ๆ จำนวนหนึ่งหรือสร้อยคอนั้นว่างเปล่า เอาท์พุต อีกครั้งเอาต์พุตอาจอยู่ในรูปแบบที่สะดวก เช่นรายการของเซ็กเมนต์, …