摘要: 题意:一棵树每个结点上都有值,现删掉一条边,使得到的两棵树上的数值和差值最小。思路:这个题我直接dfs做的,不知道树状dp是什么思路。。一开始看到数据规模有些后怕,后来想到long long 可以达到10^18,我突然就释然了。整体思路就是,先记录下整棵树的数值之和tot,然后对这棵树进行一遍dfs,每个结点都维护一个num值,num[x]表示结点x和它子树上的数值和。每求出一个结点的num值,就计算下tot - num[x]和num[x]的差值。dfs结束后最小的差值即为结果。另外,要注意的一点是,如果用res来存储最后结果,初始化应为无穷大,而因为它是long long类型,可以初始化为0 阅读全文
posted @ 2013-08-25 21:05 fenshen371 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 题目:一棵树,每个结点上都有一些苹果,且相邻两个结点间的距离为1。一个人从根节点(编号为1)开始走,一共可以走k步,问最多可以吃多少苹果。思路:这里给出数组的定义:dp[0][x][j] 为从结点x开始走,一共走j步,且j步之后又回到x点时最多能吃到的苹果数。dp[1][x][j] 为从结点x开始走,一共走j步最多能吃到的苹果数(不必再回到x点)。之所以要定义上面的一种状态是因为在求第二种状态时需要用到。下面介绍递推公式。对于结点x,假设它目前要访问的孩子为y,则1...(y-1)已经遍历过。此时有:dp[0][x][j+2] = max(dp[0][x][j], dp[0][x][m] + 阅读全文
posted @ 2013-08-25 18:27 fenshen371 阅读(238) 评论(0) 推荐(0) 编辑