Algorithms - 动态规划
文章平均质量分 77
zhouhao011280s
这个作者很懒,什么都没留下…
展开
-
算法导论 习题 15.4.5
15.4.5 设原来序列为N1, 排序后的序列为N2, 它们的LCS就是所求解。因为如果N1有另一个最长的单调递增序列,那它必然出现在N2中且不等于LCS,与假设矛盾。 所以LCS就是最长的单调递增序列。 public static int[] findMonoIncreasingNumberSequence(int[] original,int[][] maxLength){原创 2012-10-10 21:55:34 · 1228 阅读 · 0 评论 -
算法导论 习题 15.4.3
15.4.3 自顶向下的DP,按照标准的memoized递归写法即可。代码如下: public static void dp_topDown_findLCSLength(T[] x,T[] y,int[][] lcsLength){ for(int i=0;i<y.length;i++){ lcsLength[0][i] =0; } for(int i=0;i<x.le原创 2012-10-10 21:22:45 · 1104 阅读 · 0 评论 -
算法导论 习题 16.1-5
16.1-5 给定n个活动的开始时间和结束时间表,及每个活动的收益表,求对这些活动的一个组织使收益最大化。 这问题其实CLRS正文介绍贪心算法时用到的 活动选择问题 的泛化;即能用贪心算法解决的活动选择是该问题的一个特例:收益都是1。 而这里,收益是各不相同的。于是直观地看,需要用到dp解决。 而因为活动之间存在兼容问题:j的开始时间有可能与 i 的结束时间或者开始时间冲突,所以对原创 2012-10-14 23:13:55 · 5621 阅读 · 1 评论 -
算法导论 习题 15.4.4
15.4.4 1)使用 2*min(m,n)个条目计算LCS长度 实际上,计算特定的 C[i,j]只需用到 C[i-1,j-1] 或者 C[i-1,j] C[i,j-1]。所以交替使用两个大小为min(m,n)的数组表示 当前行 和 上一行 即可。 // Use dynamic programming to calculate LCS length of two strings with原创 2012-10-10 21:47:00 · 1408 阅读 · 0 评论