随笔分类 - 树形dp
摘要:题目大意:给出一个树,每个节点有一个值,问从1开始走走k步最多能遍历到最大的值的和;dp[i][j][k] 当i为零是表示如果从j点开始遍历以j为跟的子树,走k步后回到原点的最大值。dp[i][j][k] 当i为零是表示如果从j点开始遍历以j为跟的子树,走k步后不回到原点的最大值。我们知道的是如果能...
阅读全文
摘要:开学A的第一道题还是1A,感觉还是很开心。设dp[i][k]为以i为子树的情况下变成一个子树节点为k的最少需要减掉的边数。那么对每个子树背包就可以了,注意的是刚开始需要将dp[a][1] = a != 1?num[a]-1:num[a];的意思是把a的与孩子连的边全部去掉时的情况,然后一步一步背包加...
阅读全文
摘要:有的堡垒攻克需要攻克另一个堡垒,形成一个森林,最多攻克m个堡垒,求获得宝物的最大价值。1,以0做根将森林形成树;2,用背包计算当前节点下需要攻克k个堡垒能获得的宝物最大价值,但是注意同一个根节点的情况不能够先后放入背包,否则会有比如1节点选2个和选三个形成了选5个,也就是某些节点重复计算了。所以要在...
阅读全文
摘要:poj2057某公司的上下级关系是一颗树状结构,每个人不能与他的上司同时出现,每个人有一个值,求最大值。这个题需要注意的是如果不保存状态会超时,这似乎也是大部分dp应该注意的事情啊#include#include#include#includeusing namespace std;const in...
阅读全文

浙公网安备 33010602011771号