2012年8月10日

poj1463

摘要: 状态设计: 1、dp[i][0],表示在结点 i 没放置士兵的情况下,看住以结点 i 为根的子树的所有边所需的最少士兵; 2、dp[i][1],表示在结点 i 放置士兵的情况下,看住以结点 i 为根的子树的所有边所需的最少士兵。状态转移: 1、dp[i][0]=∑dp[j][1],j 是 i 的儿子结点;(根结点不放士兵时,与其相连的边必须由儿子结点来看守) 2、dp[i][1]=dp[i][1]+∑ ( MIN ( dp[j][0] , dp[j][1] ) ),j 是 i 的儿子结点。 (根结点放士兵时,儿子结点可放可不放)初始化: d[i][0]... 阅读全文

posted @ 2012-08-10 21:13 矮人狙击手! 阅读(433) 评论(0) 推荐(0) 编辑

poj3140(树形dp)

摘要: 这道题是说,给出一棵树,每个节点有一个权值,要求去掉一条边所能获得的两棵树的最小的权值差,其实不能说是dp因为除了最后一步涉及到了取最小之外,其他的地方都是在枚举而已,没有什么状态转移之类的东西存在,只能说是一道简单的树形的搜索如果你wa了,请检查1:abs()函数必须要自己写,因为调用的int abs()型的,多以必错无疑2:是否输入输出的每个地方都已经改成了long long 或者__int64,输入的时候是scanf("%I64d",&a),输出的时候是printf("%i64d",a).我自己的就是某些地方没有全改成这样的输入输出wa了两 阅读全文

posted @ 2012-08-10 17:10 矮人狙击手! 阅读(630) 评论(0) 推荐(0) 编辑

poj1192(树形dp)

摘要: 感谢涛涛不解这道题着实花了很长时间才搞明白,对图的知识忘得太多了,看这道题之前最好先把图的邻接表表示方法看下,有助于对这道题的理解,这道题让我对深度优先遍历又有了进一步的了解这道题最好画个图,有助于理解,不过你要是画个错误的图此题就无解了其实就是一个求无向树的所有子树和的最大值树形dpdp[i][0]表示以i为根,不包括i结点的子树获得最大权dp[i][1]表示以i为根,包括i结点的子树获得的最大权dp[i][0] = max(dp[k][0], dp[k][1]) k为i的所有孩子结点dp[i][1] = i结点的权 + dp[k][1] 如果dp[k][1] > 0 1 #inclu 阅读全文

posted @ 2012-08-10 12:30 矮人狙击手! 阅读(1279) 评论(0) 推荐(0) 编辑

导航