摘要: 给定一个序列,要求求出该序列的最长单调子序列, 即 longest increasing subsequence,这是一个经典的动态规划求解问题。设给定序列为 a[],大小为 n,如何求其最长单调子序列呢?考虑将最长单调子序列的长度作为所求的最优值,最长单调子序列必定以序列a[]中的某一个元素结尾。设序列count[i]为以a[i]结尾的最长单调子序列的长度,那么a[]的LIS的长度就是max{count[i]}, 对所有i。显然此问题具有最优子结构性质,count[0] = 1, count[i] = max{count[j] | 0 <= j < i, a[j] < a[ 阅读全文
posted @ 2011-10-21 14:54 南风又起 阅读(639) 评论(0) 推荐(1) 编辑
摘要: 动态规划与分治法一样,将问题的最优解切割成多个子问题的最优解;但与分治法不同的是,分治法要求各个子问题必须是相互独立的,而动态规划适用于子问题不是独立的情况,也就是各子问题包含公共的子子问题。在这种情况下,若用分治法则会做许多不必要的工作,即重复的求解公共的子子问题。 采用动态规划时,由于有多个公共的子子问题,可以将各个子子问题的结果保留下来,避免重复计算。动态规划算法可以分为以下四步实现:描述最优解的结果递归定义最优解的值按自底向上的方式计算最优解的值由计算出的结果构造一个最优解1~3步构成问题的动态规划最优解的基础,第4步在只要计算最优解的值时可以略去。经典应用:01背包问题,最优二... 阅读全文
posted @ 2011-10-17 19:54 南风又起 阅读(257) 评论(0) 推荐(1) 编辑