第三章动态规划
1.单调递增最长子序列问题
①问题描述:设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。
②解题思路:对于长度为x的序列,若其结尾的数字比长度为x-1的序列最长递增子序列大,则其最长递增子序列为长度为x-1序列的最长递增子序列+1
故其递推方程为:
可以用动态规划法求解。
2. 动态规划
解题步骤:
①分析问题:(可以画图,或依据具体例子)是否将大问题拆成几个小问题,是否存在最优子结构,是否满足无后效性(如果给定某一阶段的状态,则在这一阶段以后过程的发展不受这阶段以前各段状态的影响),能否使用动态规划解决。
②设计状态:对于状态x,记我们要求出的答案(e.g. 最小费用)为f(x).我们的目标是求出f(T).找出f(x)与哪些局面有关(记为p),写出一个式子(称为状态转移方程),通过f(p)来推出f(x).
③写出递推方程,
④编程实现:维度选择:因为要递推求解f(x),所以一般一个参数一个维度。求解顺序(填表顺序):根据递推关系式推断,子问题先填
3.结对编程情况
陈楚权打代码,我写递归方程式。各自思考,再相互探讨