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

при ограничениях:

Для решения задачи необходимо получить рекуррентное соотношение, связывающее и
.
Обозначим через
количество ресурса, используемого k-м способом (), тогда для (k-1) способов остается величина ресурсов, равная (
). Наибольший доход, который получается при использовании ресурса () от первых (k-1) способов, составит
k-го и первых (k-1) способов необходимо выбрать
таким образом, чтобы выполнялись соотношения

Эти соотношения называются функциональными уравнениями Беллмана: