Advertisement
Guest User

Untitled

a guest
Feb 11th, 2016
479
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. #ЗАДАЧА О КУЗНЕЧИКЕ СО СТОИМОСТЯМИ
  2.  
  3. Пусть кузнечик прыгает на одну или две точки вперед, а за прыжок в каждую точку необходимо заплатить определенную стоимость, различную для различных точек. Стоимость прыжка в точку `i` задается значением `Price[i]` списка `Price`. Необходимо найти максимальную стоимость маршрута кузнечика из точки `0` в точку `n`.
  4. На этот раз нам необходимо модифицировать определение целевой функции. Пусть `C(n)` — максимальная стоимость пути из `0` в `n`. Выведем рекуррентное соотношение для `C(n)`. Чтобы попасть в точку `n` мы должны попасть в точку `n−1` или `n−2`. Максимальные стоимости этих маршрутов будут равны `C(n−1)` и `C(n−2)` соответственно, к ним придется добавить значение `Price[n]` за прыжок в клетку `n`. Но из двух клеток `n−1` и `n−2` нужно выбрать тот маршрут, который имеет наибольшую стоимость.
  5.  
  6. Получили рекуррентное соотношение:
  7. ```
  8. C(n)=max(C(n−1),C(n−2))+Price(n).
  9. ```
  10. Вычислить значение целевой функции также лучше при помощи динамического программирования, а не рекурсии:
  11. ```python
  12. C = [0] * (n + 1)
  13.  
  14. C[1] = Price[1]
  15.  
  16. for i in range(2, n + 1):
  17.  
  18. С[i] = max(C[i — 1], C[i — 2]) + Price[i]
  19. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement