09 2016 档案
摘要:图9-14中,对于每个节点i,都计算 d(u) + d(v) + 2。 树的最长路径不一定经过整个树的根节点,但必然经过某个子树的根节点。所以求所有节点的 d(u) + d(v) + 2的最大值可以得到树的最长路径。 如果节点只有一个子树u,可以设另一个子树d(v) = -1 如果节点是叶子节点,没
阅读全文
摘要:先任选一个节点作为根,将无根树转换成有根树,代码实现是DFS。 以图9-13的节点i为例,因为是任意选择一个节点做DFS,有以下几种可能: 1.以节点i为根节点,有三个子树 2.以左下方节点为父节点,访问节点i,有两个子树 3.以右下方节点为父节点,访问节点i,有两个子树 4.以右上方节点为父节点,
阅读全文
摘要:p280 9.4.2 原问题d(i)是以i为根节点,子问题是以i的儿子节点和以i的孙子节点为根节点。 讲解中的“当计算出一个d(i)后,用它去更新i的父亲和祖父节点的累加值”,对应到代码,需要从树的叶子节点开始计算d(i),可以用dfs 下面是 poj 2342的代码,例题9-13 UVa 1220
阅读全文
摘要:讲解中所说 "需要保证i-j是对角线(唯一的例外是i=0且j=n-1)"的意思是,当i=0且 j=n-1时,i-j是多边形的一条边,不需要判断是否是对角线。 参考p277页的 最优三角剖分,如果允许随意切割,则“半成品”多边形的各个顶点是可以在原多边形中随意选取的,很难简洁定义成状态。 这里的意思是
阅读全文
摘要:题目讲解中的“如果记录每个颜色的第一次出现位置”指的是出现在最终序列中的位置。 如题目讲解中所说,在计算过程中并不关心每个颜色的L(c),关心的是所有L(c)的sum值。 设题目的最终答案是ans,d[i][j]表示两个序列分别移走了i和j个元素之后,此时合并的序列对ans的贡献值, 设序列1的前一
阅读全文
摘要:#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...
阅读全文

浙公网安备 33010602011771号