DP 动态规划算法的设计步骤及解题思想

则问题就无法求解;

b、确定状态和状态变量:将问题发展到各个阶段时所处于的各种客观情况用不同的状态表示出来。当然,状态的选择要满足无;后效性;

c、确定决策并写出状态转移方程:因为决策和状态转移有着天然的联系,状态转移就是根据上一阶段的状态和决策来导出本阶段的状态。所以,如果确定了决策,状态转移方程就可以写出。但事实上常常是反过来的,根据相邻两个阶段的状态之间的关系来确定决策方法和状态转移方程。

d、寻找边界条件:给出的状态转移方程是一个递推式,需要一个递推的终止条件或边界条件。


对于上述的步骤可以概括为:
1、分析最优解的性质,并刻画其结构特征;
2、递归的定义最优解;
3、自底向上或自顶向下的记忆化方式计算出最优值;
4、根据计算最优值时得到的信息,构造问题的最优解;

五:具体算法实现的说明:
动态规划的主要难点在于理论上的设计,也就是上面4个步骤的确定,一旦设计完成,实现部分就会非常的简单。
使用动态规划求解问题,最重要的是:确定动态规划的三要素:
1、问题的阶段   2、每个阶段的状态  3、从前一个阶段转换到后一阶段 之间的递推关系。

递归关系必须是从次小的问题开始到较大的问题之间的转换,从这个角度来说,动态规划往往可以用递归程序来实现,不过因为递归可以充分利用前面保存的子问题的解来减少重复计算,所以对于大规模问题来说,有递归不可比拟的优势,这也是动态规划的核心之处。

确定了动态规划的这三要素,整个求解过程就可以用一个最优决策表来描述,最优决策表是一个二维表,其中行表示决策的阶段,列表示问题的状态,表格需要填写的数据一般对应此问题的在某个阶段某个状态下的最优值(如:最短路径,最长公共子序列,最大值等),填表的过程就是根据递推关系,从1行1列开始,以行或者列优先的顺序。依次填写表格,最后根据整个表格的数据通过简单的取舍或者运算求得问题的最优解。

f(n,m)  = max{f(n-1,m),f(n-1,m-w[n])+p(n,m)}

你可能感兴趣的:(算法,dp)