Наткнулся на этот вопрос в элементах интервью по программированию (16.3). Я следую решению DP, но они также дают это аналитическое решение, которого нет у меня. Постановка проблемы:
Напишите программу, которая подсчитывает, сколько способов можно пройти из левого верхнего угла в правый нижний в двумерном массиве.
Аналитическое решение:
Учитывая тот факт, что каждый путь от (0, 0) до (n-1, m-1) представляет собой последовательность из m-1 шагов по горизонтали и n-1 шагов по вертикали, должно быть (n+m-2) Выберите ( n-1) = (n+m-2)!/((n-1)!(m-1)! таких путей.
Я понимаю, что равенство просто применяет формулу n Choose k, и я вижу, что n + m-2 = (n - 1) + (m - 1). Но я действительно не знаю, почему количество путей равно (n - 1) + (m - 1) Выберите (n - 1) для начала? Из общего количества ходов выбираем набор вертикальных? Почему такое количество путей?