З огляду 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
A261964 - це шоколадні числа, розташовані в трикутнику таким чином, що кожен ряд відповідає сумі m+n
.
options(expressions=...)
та аргументу--max-ppsize=
) призведе до більш тривалого коду, ніж цей.