Мемоизация биномиальных коэффициентов

Задача по программированию с проверкой онлайн

Сложность
Средняя
Языки
Python
JavaScript
TypeScript
Java
Go
Темы
Функции и замыкания
Динамическое программирование
Словари и множества

Число сочетаний считается рекурсией Паскаля: c(n, k) = 1, если k = 0 или k = n, иначе c(n, k) = c(n - 1, k - 1) + c(n - 1, k).

Функция мемоизирована по паре (n, k) одним общим кэшем, который пуст в начале и общий для всех вызовов. «Вычислением» называется выполнение тела функции при промахе кэша (включая базовые случаи k = 0 и k = n); попадание в кэш вычислением не считается.

Дан список запросов calls, каждый — пара [n, k], где 0 ≤ k ≤ n ≤ 30. Обработайте их по порядку и для каждого верните пару [c(n, k), число вычислений в этом запросе].

Пример: [[4, 2], [4, 2], [5, 2]] → [[6, 8], [6, 0], [10, 3]]. Для c(4, 2) вычисляются восемь пар; повторный запрос ничего не вычисляет; для c(5, 2) новые пары: (5, 2), (4, 1) и (3, 0).


Источник: задача CodeShare

Решить онлайнБесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).

Ещё задачи

Все задачи для тренировки