Дано 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=
) приведет к более длинному коду, чем этот.