题目:一条街道上有n家餐馆,现在想建立k个仓库,储存代价是每个餐馆到最近的仓库的距离和;
求最小的储存代价。
分析:dp,中位数,动态规划。
状态:f(i,j)表示前j家餐馆建立i个仓库的最小储存代价;
状态转移:f(i,j)= min(f(i-1,k)+ cost(k+1,j)){ 其中 i-1
...
分类:
其他好文 时间:
2014-09-24 02:40:15
阅读次数:
198
最长公共子串(LCS)
找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的。其实这又是一个序贯决策问题,可以用动态规划来求解。我们采用一个二维矩阵来记录中间的结果。这个二维矩阵怎么构造呢?直接举个例子吧:"bab"和"caba"(当然我们现在一眼就可以看出来最长公共子串是"ba"或"ab")
b a b
c 0 0 0
a 0 1 0
...
分类:
其他好文 时间:
2014-09-23 20:42:55
阅读次数:
169
代码中的两个方法都是动态规划。第二种方法很好理解,第一种方法是在第二种方法基础上进行优化,即“降维”,变成一维动态规划。如soulmachine所写,对于f[j] = f[j - 1] + f[j];右边的f[j],表示老的f[j],与公式中的f[i-1][j] 对应左边的f[j],表示更新后的f[...
分类:
其他好文 时间:
2014-09-23 19:18:05
阅读次数:
276
以前一直不懂LCS问题,然而找工作被LCS折磨的,与那个公司无缘了。 最长公共子序列问题是一道经典的动态规划问题,最长公共子序列问题也有最优子结构。即:Xi即X序列的前i个字符(1属于LCS(X,Y);若:xm==yn(最后一个字符相同),则不难用反证法证明:该字符必是X与Y的任一最长公共子序...
分类:
其他好文 时间:
2014-09-23 11:33:34
阅读次数:
174
http://blog.csdn.net/trochiluses/article/details/37966729进行算法设计的时候,时常有这样的体会:如果已经知道一道题目可以用动态规划求解,那么很容易找到相应的动态规划算法并实现;动态规划算法的难度不在于实现,而在于分析和设计—— 首先你得知道这道...
分类:
其他好文 时间:
2014-09-22 23:31:03
阅读次数:
158
http://blog.csdn.net/yysdsyl/article/details/4226630 1 public class Main { 2 3 /** 4 * longest common subsequence 5 * @param args 6 ...
分类:
其他好文 时间:
2014-09-22 18:07:52
阅读次数:
203
最长递增子序列的解法有很多种,常用的有最长公共子序列法、动态规划、记录所有递增序列长度最大值的方法。最长公共子序列法:如例子中的数组A{5,6, 7, 1, 2, 8},则我们排序该数组得到数组A‘{1, 2, 5, 6, 7, 8},然后找出数组A和A’的最长公共子序列即可。显然这里最长公共子序列...
分类:
其他好文 时间:
2014-09-22 13:08:02
阅读次数:
239
编辑距离指通过修改,删除,添加。使得两个字符串能够相同所需要操作的次数。 edit(i,j) if S1[i]==S2[j] temp=0; else temp=1; edit(i,j)=min(A[i-...
分类:
其他好文 时间:
2014-09-22 02:09:11
阅读次数:
204
题目:矩阵连乘,求最小运算次数,输出运算优先级(用括号给出)。
分析:dp,区间动态规划。
状态:设DP[ l ][ s ]为以 s 开始长度为 l 的区间的 矩阵乘积的最小值;
阶段:区间长度;
决策:DP[ l ][ s ] = min(DP[ k ][ s ] + DP[ l-k ][ s+k ] + 乘法代价)...
分类:
其他好文 时间:
2014-09-21 23:54:01
阅读次数:
272
题记:最近刚研究了动态规划,感觉确实是算法思想中比较晦涩深奥的一种,解法2就是用动态规划,一般都是用数组记录尝试过的解法结果,为后续的解法提供剪枝。对于这道题目,解法1,解法3的思路比较简单易懂。解法1:用两个for循环找出所有子串,第三个for循环用于判断该子串是否为回文,是回文则且比已找到的回文...
分类:
其他好文 时间:
2014-09-21 22:25:31
阅读次数:
748