动态规划是什么
求解动态规划的步骤
- 找到问题目标
- 定义状态: opt[n]
- 状态转移方程: opt[n] = best_of(opt[n=1]. opt[n-2],...)
例子1: 最大子序和
有一个数组A, 从数组中找到一个序列i->j的和的值最大,表示第j+1个位置前的最大子序列和.
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
目标:
子问题:
即检验 是否大于零,只要大于零加 ,如果 ,那么直接.
例子2:
给定一个无序的整数数组,找到其中最长上升子序列的长度。
输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
目标:
子问题:
即,A[j]前的所有子序列的最大长度M(x) 加 1.
还有其他优化算法,见: blog
网友评论