Так как речь идет о таблице, то лучше перебрать рекурсивно. Логично , что количество путей для клетки (i,j) - это количество путей для правой соседней клетки + количество путей для нижней соседней клетки.
При таком условии мы будем посещать те же клетки слишком часто, однако значение для них меняться не будет. Имеет смысл вычислить их единожды и запомнить для последующих использований. (На самом деле, достаточно иметь буфер вместимостью всего в 6 элементов, но мы сделаем полное запоминание).
(Иллюстрация 3 - таблица кэша)
Иллюстрации кода и возможного вывода прикреплены в дополнительных материалах.
========================
Ваши оценки и отзывы позволяют лучше оценить качество ответа.
Если ответ удовлетворил, не забудь отметить его как "Лучший".
Успехов в учёбе!
========================
Код:
cache = {}
def calculate_max_way_price(x: int, y: int, m:int, n:int):
if (x, y) in cache:
return cache[(x, y)]
x_way, y_way = 0, 0
if x < m - 1:
x_way = calculate_max_way_price(x + 1, y, m, n)
if y < n - 1:
y_way = calculate_max_way_price(x, y + 1, m, n)
if x == m - 1 and y == n - 1:
cache[(x, y)] = 1
return 1
cache[(x, y)] = x_way + y_way
return x_way + y_way
N = int(input("Enter N value: "))
M = int(input("Enter M value: "))
print(calculate_max_way_price(0, 0, N, M))
Поделитесь своими знаниями, ответьте на вопрос:
Цена товара равна 1362 или 3137 рублями За
254₁₆ = 2 · 16² + 5 · 16¹ + 4 · 16⁰ = 512 + 80 + 4 = 596₁₀
546.1₁₀ = 546.1₁₀
596 | 8 = 74 (4₄)
74 | 8 = 9 (2₃)
9 | 8 = 1₁ (1₂)
596₁₀ = 1124₈
Сначала переведём целую часть в восьмеричную систему счисления, а затем дробную:
546 | 8 = 68 (2₄)
68 | 8 = 8 (4₃)
8 | 8 = 1₁ (0₂)
546₁₀ = 1042₈
Умножаем дробную часть на 8 и записываем результат в виде:
цело_число.дробное_число
Если целое число делится на основание, то делим. А дробную часть всегда умножаем на основание и записываем в результат, как показано выше.
0. | 1 · 8 (0 / 8 = 0, 1 · 8 = 8)
0 | 8 · 8 (0 / 8 = 0, 8 · 8 = 64, поэтому 6 в целую, а 4 в дробную)
6 | 4 · 8 (6 / 8 = 8 (не делится целочисленно), 4 · 8 = 32, поэтому 3 в целую, а 2 в дробную)
3 | 2 (дальше можем не продолжать, всё зависит от точности, которая нам нужна)
Теперь собираем числа из левого блока сверху вниз:
0.063
И добавляем к 1042:
1042₈ + 0.063₈ = 1042.063₈
Результат1124₈ + 1042.063₈ = 2166.063₈
ответ2166.063₈