#python #combinations #dynamic-programming #permutation
Вопрос:
Алиса каждый день бегает трусцой на N метров. Иногда она бегает, а иногда идет пешком. Ее скорость ходьбы составляет 1 м/с, а скорость бега-2 м/с. Учитывая расстояние, до которого она совершает пробежку, рассчитайте количество способов, которыми она может совершать пробежку.
пример:
Вход: 3 (общее пройденное расстояние во время бега трусцой)
Вывод: 3 (возможный случай)
Пояснение: Алиса могла бегать трусцой 3 способами
- Алиса проходит 3 метра
- Алиса пробежала 2 метра, а затем прошла 1 м
- Алиса проходит 1 м, а затем бежит 2 м
Пример 2:
Вход: 4
Выход: 5
Пояснение: Алиса могла бегать трусцой 5 способами
- Алиса пройдите все 4 метра
- Алиса сначала идет 2 метра, а затем бежит 2 метра
- Алиса могла пробежать 2 метра, а затем пройти 2 метра
- Алиса пройди 1 метр, а затем пробежи 2 метра, а затем пройди 1 метр
- Алиса пробежала все 4 метра
Я решил приведенную выше постановку проблемы, используя следующий код
from itertools import permutations
n = int(input())
c = 0
t = [2]*(n//2)
if n % 2 != 0:
t = t [1]
for i in range(t.count(2)):
c = c len(set(list(permutations(t, len(t)))))
t.remove(2)
t.append(1)
t.append(1)
c = c len(set(list(permutations(t, len(t)))))
print(c)
Я новичок в динамическом программировании, кто-нибудь может мне помочь ? как я могу реализовать это в методе динамического подхода и добиться более оптимальной сложности по времени?
Большое вам спасибо за ваше ценное отношение к моей проблеме.
Комментарии:
1. Я не понимаю постановки проблемы. Алиса должна выбрать количество
a
метров для ходьбы и количествоb
метров для бега, чтобыa b=N
? Есть толькоN 1
возможности. Здесь не нужен какой-либо алгоритм, просто вернитесьN 1
.2. Я не понимаю примера, который вы приводите. Почему вывод
3
, а не4
в этом случае? Вы игнорируете решение, в котором Алиса пробегает 3 метра?3. «Ее скорость ходьбы составляет 1 м/с, а скорость бега-2 м/с.» Имеет ли эта информация какое-либо отношение к проблеме? Как?
4. Похоже, что вопрос такой же, как «сколько способов подняться по N ступеням, делая по 1 или 2 шага за раз», на который ответ-fib(N 1)
5. Недостающей частью вопроса, по-видимому, является неписаное предположение о том, что Алиса может переключаться между ходьбой и бегом только на границах целых секунд.
Ответ №1:
Вдохновленный всеми предыдущими постами и подтвержденными неписаными предположениями, это всего лишь еще один вопрос о последовательности выдумок.
Титры ко всем предыдущим плакатам. (код тогда довольно прост) Просто для справки — надеюсь, это поможет.
def jogging_ways(n: int) -> int:
# f(3) = f(1) f(2)
a, b = 1, 1
for i in range(n):
a, b = b, a b
#print(a, b)
return a
Выполняется:
> jogging_ways(4)
5
> jogging_ways(5)
8