一、动态规划
动态规划通常是用来求最优解问题的一种思路或方法。动态规划的基本思想是将要求解的问题分为若干子问题,当前子问题的最优解可以从上次子问题的解推出,从而求出原问题的最优解。
动态规划求解过程可简单分为两个步骤:前一子问题求出解时的状态和前一子问题到当前子问题的状态转移方程。
二、简单实例
最近遇到的使用动态规划求最优解的两个问题
1、在m*n的矩阵上,从左上角出发,每步只能向下走或向右走,每个位置上有一个数,将行走路线上所有经过的位置上的数值求和,求到达右下角时可以获得的最大值。
运用动态规划思想进行分析:到达第(i,j)位置时的最大值应该等于前一步(可能是(i-1,j)或(i,j-1))获得的最大值加上(i,j)位置的值(0 <= i < m, 0 <= j < n)。
算法思路如下:
(1)设每个位置的值为num[i][j],定义数组max[i][j]来存储每个位置的最大值;
(2)i=0,j=0;时,max[i][j] = num[i][j];(计算起始点)
(3)i=0,j!=0;时,max[i][j] = max[i][j-1] + num[i][j];
i!=0,j=0;时,max[i][j] = max[i-1][j] + num[i][j];(计算两条边界)