摘要: http://www.sqlite.org/sqlite-amalgamation-3.6.23.1.tar.gz 阅读全文
posted @ 2016-10-15 10:01 PatrickZhou 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 图9-14中,对于每个节点i,都计算 d(u) + d(v) + 2。 树的最长路径不一定经过整个树的根节点,但必然经过某个子树的根节点。所以求所有节点的 d(u) + d(v) + 2的最大值可以得到树的最长路径。 如果节点只有一个子树u,可以设另一个子树d(v) = -1 如果节点是叶子节点,没 阅读全文
posted @ 2016-09-13 14:24 PatrickZhou 阅读(935) 评论(0) 推荐(0) 编辑
摘要: 先任选一个节点作为根,将无根树转换成有根树,代码实现是DFS。 以图9-13的节点i为例,因为是任意选择一个节点做DFS,有以下几种可能: 1.以节点i为根节点,有三个子树 2.以左下方节点为父节点,访问节点i,有两个子树 3.以右下方节点为父节点,访问节点i,有两个子树 4.以右上方节点为父节点, 阅读全文
posted @ 2016-09-13 09:05 PatrickZhou 阅读(5143) 评论(0) 推荐(0) 编辑
摘要: p280 9.4.2 原问题d(i)是以i为根节点,子问题是以i的儿子节点和以i的孙子节点为根节点。 讲解中的“当计算出一个d(i)后,用它去更新i的父亲和祖父节点的累加值”,对应到代码,需要从树的叶子节点开始计算d(i),可以用dfs 下面是 poj 2342的代码,例题9-13 UVa 1220 阅读全文
posted @ 2016-09-08 15:04 PatrickZhou 阅读(1476) 评论(0) 推荐(0) 编辑
摘要: 讲解中所说 "需要保证i-j是对角线(唯一的例外是i=0且j=n-1)"的意思是,当i=0且 j=n-1时,i-j是多边形的一条边,不需要判断是否是对角线。 参考p277页的 最优三角剖分,如果允许随意切割,则“半成品”多边形的各个顶点是可以在原多边形中随意选取的,很难简洁定义成状态。 这里的意思是 阅读全文
posted @ 2016-09-07 11:30 PatrickZhou 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 状态转移说明了原问题的子结构。下面的代码修改了打印方法。 阅读全文
posted @ 2016-09-06 09:57 PatrickZhou 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 题目讲解中的“如果记录每个颜色的第一次出现位置”指的是出现在最终序列中的位置。 如题目讲解中所说,在计算过程中并不关心每个颜色的L(c),关心的是所有L(c)的sum值。 设题目的最终答案是ans,d[i][j]表示两个序列分别移走了i和j个元素之后,此时合并的序列对ans的贡献值, 设序列1的前一 阅读全文
posted @ 2016-09-02 17:51 PatrickZhou 阅读(183) 评论(0) 推荐(0) 编辑
摘要: #define _CRT_SECURE_NO_WARNINGS #include #include #include #include using namespace std; int T; char str[1005]; int len; int s[1005][1005]; // s[i][j] == 1 --> str[i..j] is palindrome int d[1... 阅读全文
posted @ 2016-09-01 09:46 PatrickZhou 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 参考 http://www.cnblogs.com/Kiraa/p/5510757.html http://www.cnblogs.com/zhaopAC/p/5159950.html 根据题目说明中的这句话 reduce the total system cost by eliminating s 阅读全文
posted @ 2016-08-30 09:40 PatrickZhou 阅读(164) 评论(0) 推荐(0) 编辑
摘要: p400 页最后一段 When j >= i , we need to select a root kr from among ki ... kj and then make an optimal binary search tree with keys ki ... kr-1 as its lef 阅读全文
posted @ 2016-08-27 13:11 PatrickZhou 阅读(184) 评论(0) 推荐(0) 编辑