กำหนดm
โดยn
แท่งช็อกโกแลตm,n
บวกออกจำนวนวิธีการแบ่งแถบออกเป็นmn
1 โดย 1 ชิ้นที่แต่ละตัวแบ่งเกิดขึ้นบนเส้นตาราง
คำสั่งซื้อเป็นสิ่งสำคัญ ชิ้นยังมีความแตกต่างดังนั้นทั้งสองชิ้นที่ปลายด้านหนึ่งของ 1 โดย 3 ช็อกโกแลตบาร์ไม่เท่ากัน
ตัวอย่างเช่นสำหรับบล็อก 2 คูณ 2 เรามี:
_ _ _ _ _ _ _ _
|_‖_| -> |‗| |_| -> |_| |‗| -> |_| |_|
|_‖_| |_| |_| _ |_| _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|_‖_| -> |_| |‗| -> |‗| |_| -> |_| |_|
|_‖_| |_| |_| |_| _ _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_‖_| -> |_| |_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_|_| |_‖_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_|_| -> |_‖_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_‖_| |_| |_| |_| |_|
ดังนั้นจึงมี 4 วิธีในการเลิกช็อคโกแลตแท่ง 2 ต่อ 2
กฎระเบียบ
อินพุตจะเป็นจำนวนเต็มสองจำนวนผ่านฟังก์ชั่นอินพุต, STDIN, บรรทัดคำสั่งหรือคล้ายกัน เอาท์พุทจำนวนเดียวจำนวนวิธีที่จะสลายช็อคโกแลตบาร์
เนื่องจากตัวเลขเพิ่มขึ้นอย่างรวดเร็วไม่ต้องกังวลหากผลลัพธ์เกินขีด จำกัด จำนวนเต็มของภาษาของคุณ - การส่งของคุณจะถูกต้องตราบใดที่อัลกอริทึมทำงานได้ตามทฤษฎีสำหรับอินพุตที่เป็นไปได้ทั้งหมด
กรณีทดสอบ
เอาท์พุทไม่ขึ้นอยู่กับคำสั่งของดังนั้นกรณีทดสอบมีการระบุไว้เช่นนั้นm,n
m <= n
1 1 -> 1
1 2 -> 1
1 3 -> 2
1 4 -> 6
1 5 -> 24
1 10 -> 362880
2 2 -> 4
2 3 -> 56
2 4 -> 1712
2 5 -> 92800
2 10 -> 11106033743298560
3 3 -> 9408
3 4 -> 4948992
3 5 -> 6085088256
3 10 -> 76209753666310470268511846400
4 4 -> 63352393728
A261964m+n
เป็นตัวเลขช็อคโกแลตได้จัดในรูปสามเหลี่ยมดังกล่าวที่แต่ละแถวสอดคล้องกับผลรวม
options(expressions=...)
และอาร์กิวเมนต์--max-ppsize=
) จะทำให้โค้ดยาวกว่าโค้ดนี้