พาร์ติชันเวกเตอร์แบ่งเวกเตอร์ขึ้นชุดของเวกเตอร์เพื่อให้ผลรวมของพวกเขาเป็นต้นฉบับ นี่คือพาร์ทิชันสอง:
[3, 1, 2] = [3, 1, 2]
[3, 1, 2] = [0, 0, 1] + [0, 0, 1] + [0, 1, 0] + [1, 0, 0] + [2, 0, 0]
[3, 1, 2] = [1, 1, 2] + [2, 0, 0]
การเพิ่มเวกเตอร์ที่นี่ทำองค์ประกอบที่ชาญฉลาด พาร์ติชันที่ถูกต้องไม่มีเวกเตอร์ใด ๆ ที่มีจำนวนเต็มลบหรือเวกเตอร์ทั้งหมดเป็นศูนย์
ตอนนี้ความท้าทายคือการเขียนโปรแกรมหรือฟังก์ชั่นที่สร้างพาร์ทิชันเวกเตอร์ที่เป็นไปได้ทั้งหมดที่กำหนดเวกเตอร์เป้าหมาย นี่อาจฟังดูง่าย ...
... แต่มีการบิด หากเวกเตอร์อินพุตมีขนาด L และพาร์ติชันที่ใหญ่ที่สุดที่สร้างขึ้นมีองค์ประกอบ M คุณไม่สามารถใช้หน่วยความจำ O (L * M) มากกว่า
คุณอาจคิดว่าจำนวนเต็มใช้หน่วยความจำ O (1) ซึ่งหมายความว่าคุณต้องส่งออกพาร์ติชันเมื่อคุณสร้างพาร์ติชัน ยิ่งไปกว่านั้นคุณจะต้องแสดงผลแต่ละพาร์ติชั่นเพียงครั้งเดียวเท่านั้น ตัวอย่างเช่นเหล่านี้เป็นพาร์ติชันเดียวกัน:
[3, 1, 2] = [3, 0, 2] + [0, 1, 0]
[3, 1, 2] = [0, 1, 0] + [3, 0, 2]
หากคุณจะออกทั้งคำตอบของคุณไม่ถูกต้อง
พาร์ติชันทั้งหมดสำหรับ[3, 2]
:
[3, 2]
[0, 1] + [3, 1]
[0, 1] + [0, 1] + [3, 0]
[0, 1] + [0, 1] + [1, 0] + [2, 0]
[0, 1] + [0, 1] + [1, 0] + [1, 0] + [1, 0]
[0, 1] + [1, 0] + [2, 1]
[0, 1] + [1, 0] + [1, 0] + [1, 1]
[0, 1] + [1, 1] + [2, 0]
[0, 2] + [3, 0]
[0, 2] + [1, 0] + [2, 0]
[0, 2] + [1, 0] + [1, 0] + [1, 0]
[1, 0] + [2, 2]
[1, 0] + [1, 0] + [1, 2]
[1, 0] + [1, 1] + [1, 1]
[1, 1] + [2, 1]
[1, 2] + [2, 0]
[3, 2, 5, 2]
ในการทดสอบคำตอบของคุณทำงานบน มันควรสร้างพาร์ติชัน 17939 ซึ่งทั้งหมดรวม[3, 2, 5, 2]
และที่ไม่ซ้ำกัน (คุณสามารถทดสอบความเป็นเอกลักษณ์โดยการเรียงลำดับแต่ละพาร์ติชันพจนานุกรม)
รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ