Динамическое программирование- это метод нахождения оптимальных решений в задачах с многошаговой структурой, когда на каждом шаге находиться оптимальное решение.
Пусть имеется некоторое количество ресурсов х, которое необходимо распределить между п различными предприятиями, объектами, работами и т.д. так, чтобы получить максимальную суммарную эффективность от выбранного способа распределения.
Пусть – количество ресурсов, выделенных - му предприятию (– функция полезности, величина дохода от использования ресурса xi, полученного - м предприятием; – наибольший доход, который можно получить при использовании ресурсов от первых k различных предприятий.
Сформулированную задачу можно записать в математической форме:
при ограничениях:
Для решения задачи необходимо получить рекуррентное соотношение, связывающее и .
Обозначим через количество ресурса, используемого k-м способом (), тогда для (k-1) способов остается величина ресурсов, равная (). Наибольший доход, который получается при использовании ресурса () от первых (k-1) способов, составитk-го и первых (k-1) способов необходимо выбрать таким образом, чтобы выполнялись соотношения
Эти соотношения называются функциональными уравнениями Беллмана: