Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ЗАДАЧА О КУЗНЕЧИКЕ СО СТОИМОСТЯМИ
- Пусть кузнечик прыгает на одну или две точки вперед, а за прыжок в каждую точку необходимо заплатить определенную стоимость, различную для различных точек. Стоимость прыжка в точку `i` задается значением `Price[i]` списка `Price`. Необходимо найти максимальную стоимость маршрута кузнечика из точки `0` в точку `n`.
- На этот раз нам необходимо модифицировать определение целевой функции. Пусть `C(n)` — максимальная стоимость пути из `0` в `n`. Выведем рекуррентное соотношение для `C(n)`. Чтобы попасть в точку `n` мы должны попасть в точку `n−1` или `n−2`. Максимальные стоимости этих маршрутов будут равны `C(n−1)` и `C(n−2)` соответственно, к ним придется добавить значение `Price[n]` за прыжок в клетку `n`. Но из двух клеток `n−1` и `n−2` нужно выбрать тот маршрут, который имеет наибольшую стоимость.
- Получили рекуррентное соотношение:
- ```
- C(n)=max(C(n−1),C(n−2))+Price(n).
- ```
- Вычислить значение целевой функции также лучше при помощи динамического программирования, а не рекурсии:
- ```python
- C = [0] * (n + 1)
- C[1] = Price[1]
- for i in range(2, n + 1):
- С[i] = max(C[i — 1], C[i — 2]) + Price[i]
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement