
树形dp
Mmm040403
这个作者很懒,什么都没留下…
展开
-
树形dp:刷油漆
用f[x][y]表示以x为根的数里,选了y个的最大值。然后树形dp是一个背包啦我们dfs每一个x,对于每一个x,枚举他的儿子们,再一个个枚举y。然后再一个个枚举他的儿子取了几个(k)记得要存一下g!!!不然你更新的时候会出点问题。。。因为g是没有用过儿砸的时候的值,不然就不是惹。。。void find(int x){ f[x][1]=val[x]; for(...原创 2019-08-16 19:49:53 · 131 阅读 · 0 评论 -
有关树形DP的总结
树形dp的主要思路树形背包:与我们考普及组时写的背包dp相似,枚举前i个物品,一共有j的容量可以取得的最优值。但是,这里背包的容量是不固定的,所以我们要加一维来枚举背包的容量。但是注意,这里还是二维数组,我们通过本质上类似于滚动数组的方式来进行推导。因为是从j-k推到j,所以我们一定要对循环逆序(不然就不是用i-1更新i了)大概就是这样。。。一些例题(注释里是要注意的细节)选课:h...原创 2019-04-05 22:33:34 · 185 阅读 · 0 评论 -
树形dp-访问美术馆
主要问题: 树如何编号(重点:如何体现父子关系)树的编号方式:1)读入给了编号并给予父子关系 (父子关系已给出) 处理:同存图2)将数组转化为一个树 父子关系体现在其编号上(编号的关系->父子关系)典型:线段树,堆(lson:2*x rson: 2*x+1)void dfs(int x){ cin>>a[x].x>>a[x].w; a[x].x...原创 2018-10-18 23:31:53 · 293 阅读 · 0 评论 -
hdu:color a tree-树形dp
我们可以二分答案。(至少染色几个点)然后对于限制B,我们可以转化成子树x内之多有num(总染色数)-x(子树外的染色数)然后通过树形dp从下到上算每个根节点的子树内的上界和下界,判断上是否不小于下界。PS:还有注意一下在算上届的时候应该是所有子树的up和+1(因为还有根节点自己)->被坑了我好难受。这样也可以保证对于没有上届限制的点,他的上届就是siz同时还要注意判断是否...原创 2019-09-28 11:59:03 · 232 阅读 · 0 评论