一波树上背包秒杀-- #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; const int MAXN = 312; int f[MAXN][MAXN], cnt[MAXN], n, k; struct node{ i…
从这篇博客往前到二叉苹果树都可以用分组背包做 这依赖性的问题,都可以用于这道题类似的方法来做 表示以i为根的树中取j个节点所能得的最大价值 那么每一个子树可以看成一个组,每个组里面取一个节点,两个节点,三个节点就是三个不同的物品 对于这道题,有 我们来类比一下普通分组背包的转移方程 这里的k表示第几组,而在树上就直接用i表示,因为i已经包含它的子树的信息了 然后 相当于, 后面的相当于 然后注意k不能等于0,因为k=0就不会减去w了,本身的值就是k=0的情况 #include<cstdio>…
这道题的难点在于状态怎么设计 这道题要求全部都是安全的,所以我们做的时候自底向上每一个结点都要是安全的 结合前一题当前结点选和不选,我们可以分出四种情况出来 选 安全 选 不安全 不选 安全 不选 不安全 显然选 不安全是不可能的,那么就去掉 所以我们就可以设计状态为表示i放人且安全表示i不放人且安全表示i不放人且不安全 那么状态转移方程最关键的就是怎么保证回溯的时候都是安全的. 我们只考虑以u为结点的子树,不考虑i的父亲 我们要让u的子树除了u以外全部是安全的,u自己安全和不安全分开讨论 对于…
这道题和上一道题非常相似 这道题是看边,上一道是看点. 但是状态定义不同 看边的话没有不放不安全这种状态 因为当前结点的父亲无法让这颗子树没有看到的边看到 所以这种状态不存在 而上一道题存在不放不安全这种状态 因为当前结点的父亲可以让这个不安全的结点变得安全 边和点是两种不同的思考方式,得出得状态和方程也就不一样了 还有这题不知道根.多叉树随便选个点做根,然后注意不要递归到父亲就好了 #include<cstdio> #include<vector> #include<alg…
这里的先后关系可以看成节点和父亲的关系 在树里面,没有父亲肯定就没有节点 所以我们可以先修的看作父亲,后修的看作节点 所以这是一颗树 这题和上一道题比较相似 都是求树上最大点权和问题 但这道题是多叉树 这里有多个根,那就加一个编号为0的根,价值为0, 同时m要+1(因为这个虚拟的 根一定要取) 解法两种 (1)转二叉树 左儿子右兄弟可以转二叉树 这篇博客讲得很好 https://blog.csdn.net/c20190102/article/details/69946551 注意这里转后有"后遗…
解这道题的前提是非常熟悉中序遍历的方式 我就是因为不熟悉而没有做出来 中序遍历是5 7 1 2 10的话,如果1是根节点 那么5 7 1就是1的左子树,2, 10就是右子树 这就有点中链式dp的味道了,实际解法也是中链式dp的解法 设f[i][j]为中序遍历从i到j的最大价值 f[l][r] = f[l][mid-1] * f[mid+1][r] + d[mid] 从小规模推到大规模 dp过程中记录根节点以求前序遍历. #include<cstdio> #define REP(i, a, b)…
问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和它相邻的点都不能被选择.求选出的点的权值和最大是多少? 输入格式 第一行包含一个整数 n . 接下来的一行包含 n 个正整数,第 i 个正整数代表点 i 的权值. 接下来一共 n-1 行,每行描述树上的一条边. 输出格式 输出一个整数,代表选出的点的权值和的最大值. 样例输入 5 1 2 3 4 5 1 2 1 3 2 4 2 5 样例输出 12 样例说明 选择3.4.5号点,权值和为 3+4+5…
前言:按照计划,昨天应该是完成树形DP7题和二分图.最大流基础专题,但是由于我智商实在拙计,一直在理解树形DP的思想,所以第二个专题只能顺延到今天了.但是昨天把树形DP弄了个5成懂我是很高兴的!下面我把这7题的解题思想和部分代码分享给大家. 题目一:皇宫看守问题描述:太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫.皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步一哨,每个宫殿都要有人全天候看守,在不同的宫殿安排看守所需的费用不同.可…
树状动态规划定义 之所以这样命名树规,是因为树形DP的这一特殊性:没有环,dfs是不会重复,而且具有明显而又严格的层数关系.利用这一特性,我们可以很清晰地根据题目写出一个在树(型结构)上的记忆化搜索的程序.而深搜的特点,就是"不撞南墙不回头".这一点在之后的文章中会详细的介绍. 首先是扫盲,介绍几条名词的专业解释以显示我的高端(大部分人可以略过,因为学习到树规的人一下应该都懂--): 动态规划:  问题可以分解成若干相互联系的阶段,在每一个阶段都要做出决策,全部过程的决策是一个决策序列…
树形DP入门 poj 2342 Anniversary party   先来个题入门一下~ 题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚会的总活跃指数最大. 解题思路: 任何一个点的取舍可以看作一种决策,那么状态就是在某个点取的时候或者不取的时候,以他为根的子树能有的最大活跃总值.分别可以用f[i,1]和f[i,0]表示第i个人来和不来. 当…