Достаточно подробно и понятно динамическое программирование описано в [3]. Рассмотрим один из примеров.
Задача «Треугольник». На рисунке изображен треугольник из чисел. Напишите программу, которая вычисляет наибольшую сумму чисел, расположенных на пути, начинающемся в верхней точке треугольника и заканчивающемся на нижней строке треугольника.
Каждый шаг на пути может осуществляться вниз по диагонали влево или вниз по диагонали вправо.
Число строк в треугольнике > 1 и <100.
Треугольник составлен из целых чисел от 0 до 99.
Входные данные запишем в матрицу D.
Матрица D
Матрица R
Будем вычислять матрицу R: arгау[1..МaxN, 0..МaxN] следующим образом, предварительно обнулив ее элементы:
где max - функция вычисления максимального из двух чисел.
Осталось найти наибольшее значение в последней строке матрицы R, оно равно 30.
Исходные данные считываем из текстового файла. Используем стандартные текстовые файлы Input и Output (их стандартные назначения: клавиатура и экран), перезначив их на файлы указанные в условии задачи. Пусть первая строка содержит число строк в треугольнике(N), далее N строк исходного треугольника.
Тип данных выбираем Integer, так как исходные данные не выходят за пределы этого типа, а максимальный результат не превысит 99*100 (100 строк в треугольнике, числа в строках до 99).
Ниже приводится полный текст программы с комментариями.