树形DP
Cliu__
自己选择的路,就算跪着也要走完!
展开
-
洛谷P1122 最大子树和
题目连接:https://www.luogu.org/problem/show?pid=1122 解题思路: 这是一道类似于树形DP的题。 我们可以用求最大字段和的方法求最大子树和,所以问题就转化成了如何在遍历树记录子树和。 我们可以用f[x]数组储存以x为根的子树和,一直搜到它最远的儿子,然后返回时如果当前的值>0就说明能产生影响,就加上,然后标记该点,用ans储存最大的子树原创 2017-08-19 21:24:00 · 462 阅读 · 0 评论 -
洛谷P2015 二叉苹果树
一道树型DP,不过这道题是按照边来做的,和点略有不同,因为累加的是边的权值,并且取m条边,那对于每个子树而言,它选的边肯定是 min(k,m),k表示子树中的边数,所以要dfs 找边数。 接下来是树型DP的常用套路了 dp[i][j]表示以i为根选j条边产生的值,状态为 根 与 子树,还需要加上权值。 详情见代码#include<iostream> #include<cstdio> using原创 2017-08-05 22:08:03 · 209 阅读 · 0 评论 -
洛谷P2014 选课
又是一道树型DP,不过这次是以点带权值,因为根是不确定的,我们可以设个虚根 0 ,因为算是多了一点,所以总点数应该++。 因为是点带权值,所以不用dfs边的数量了,不过有一点虚注意,因为多了一个点,所以j层循环(所选的边数)下界应该是到2的。#include<iostream> #include<cstdio> using namespace std; int n,m,s,x,y,dp[305][原创 2017-10-03 23:11:36 · 319 阅读 · 0 评论