Я использую язык C ++.
У Марка "N" дней.Первоначально он находится в положении (h1,0) на оси X.Каждый день он может переходить к координатам (h1 + a, 0) или (h1 + b, 0) или (h1 + c, 0).Он может выбрать любой, какой захочет.Каждый день он может ходить в (+ a, + b или + c).В N-й день он должен достичь позиции (h2,0).Подсчитайте количество способов, которыми Марк может достичь (h2,0) за N дней.
Значения N, h1, h2, a, b, c являются большими (координаты и значения a, b, c также может быть отрицательным, в некоторых случаях a = b или b = c или c = a или a = b = c)
Мой подход таков: - Каждый день я сохраняю позиции, которые онможет достичь в этот день с количеством (количество способов), чтобы достичь этой позиции.Я использую карту, чтобы сделать это.И этот подход не эффективен.
Может кто-нибудь поделиться более эффективным подходом?
Мой второй подход, который должен сработать, - это изменение проблемы обмена монет: -)
Пример: -
N = 3, h1 = 0, h2 = 6, a = 1, b = 2, c = 3
Ответ: -7 (количество способов)
1-й путь :-( 1 + 2 + 3)
2-й способ :-( 1 + 3 + 2)
3-й путь :-( 2 + 1 + 3)
4-й путь :-( 2 + 3 + 1)
5-й способ :-( 3 + 1 + 2)
6-й способ :-( 3 + 2 + 1)
7-й способ :-( 2 + 2 + 2)
Формат :-( Выбор на 1-й день + Выбор на 2-й день + Выбор на 3-й день)
Ограничения: - 1 <= N <= 10 ^ 5. </p>
-10 ^ 9<= h1, h2, a, b, c <= 10 ^ 9.</p>