Динамическое программирование. Задача о счастливых билетах.
Условие
Задача о счастливых билетах: билет состоящий из 2n цифр называется счастливым если сумма первых n цифр равна сумме последних n цифр.
Необходимо посчитать кол-во счастливых билетов например для n=3 (длина билета 6).
Решение
Для решения данной задачи необходимо построить специальную таблицу от n = 1, до необходимого нам n.
Во всех колонка рассматриваются ячейки от 0 до 9 * n + 1 (n - текущее), для n=1 это 9 * 1 + 1, для n=2 это 9 * 2 + 1=19, и т.д.
- Первая колонка - базовый случай, заполняется “1”.
- Пустые ячейки это “0”.
- Если
k (индекс) меньше 10
, то значение ячейки равно сумме первых k ячеек левого столбца. - Если
k >= 10
, то значении ячейки равно сумме 10 ячеек левого столбца начинаяс k до k-10+1
Ответом является сумма квадратов значений всех ячеек нужного нам столбца
(Чтобы быстро создать таблицу)
- базовый случай, первая строка все “1”, первый столбец 1 * 9 + 1= 10 единиц
- первые 10 строк (от 0 до 9 цифры) для любого n, это сумма левой + верхней ячейки
- начиная с k=10, значение ячейки равно сумме значений ячейки слева и ещё 9 ячеек вверх. (сумма от k-10+1 до k)