Правильный подход тут - именно обобщение одномерного случая (по крайней мере, оно очень простое, а других простых подходов я за 10 минут не придумал).
Пусть
- максимальная сумма, получаемая за первые
столбцов. Для одномерного случая
очень просто выражается через
и
- оптимальное решение, включающее
-й элемент - это собственно
-й элемент и оптимальное решение для первых
элементов. Т.е. когда мы строим из решения для
столбца решение для
столбцов нас интересует только брали мы
-й элемент или нет; какие конкретно предыдущие элементы мы брали - неважно, важна только их сумма.
Переформулируем это:
- это максимальная сумма за первые
столбцов, если
-й элемент не брать, а
- максимальная сумма за первые
столбцов, если
-й элемент брать. Заметим, что
выражается через
и
- попробуйте выписать это выражение явно.
Если строк больше одной, то для перехода от
столбца к
нам уже не хватит простого параметра
. Подумайте, какая информация о решении для первых
столбцов нам нужна, чтобы продолжить его до
.