POJ2486 Apple Tree 【树上背包】】的更多相关文章

题目大概是一棵树,每个结点都有若干个苹果,求从结点1出发最多走k步最多能得到多少个苹果. 考虑到结点可以重复走,容易想到这么个状态: dp[u][k][0]表示在以结点u为根的子树中走k步且必须返回u能得到的最多苹果 dp[u][k][1]表示在以结点u为根的子树中走k步且可以不返回u能得到的最多苹果 单纯这样转移又是指数级的时间复杂度,所以又是树上背包了 转移就是: dp[u][k][0]=max(dp[u][k][0],dp[v][k'][0]+dp[u][k-k'-2][0])(v是u当前…
Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %lld & %llu Description Wshxzt is a lovely girl. She likes apple very much. One day HX takes her to an apple tree. There are N nodes in the tree. Each node has an amount of apples. Wshxzt…
Sagheer and Apple Tree 题解: 先分析一下, 如果只看叶子层的话. 那么就相当于 经典的石子问题 nim 博弈了. 那我们看非叶子层. 看叶子层的父亲层. 我们可以发现, 如果从这一层移动x个苹果到叶子,那么另一个人就可以吃掉这x个苹果. 不影响任何的前后手. 然后我们再分析,叶子层父亲的父亲.如果从这里移动到下一层,就相当于是吃掉了这x个苹果.因为就算另一个人再移动这x个苹果, 你也可以把他吃掉,这样就相当于没有任何影响. 所以,我们如果将和叶子同奇偶深度的点的值xor一…
一句话题意:一棵树,一共n个点,每个点上有一个权值,求从1出发,走k步,最多能遍历到的权值.可以往回走. 第一(二)道树上背包题,先是看了dalao的题解,改了一点就过样例了.然而....TLE??? 改了挺久发现由于多组数据且没有“0 0”的输入,如果不在读入的时候加“~”或“EOF”就会死循环,从而导致TLE. 状态设计:设f[i][j][0/1]为以i为根的子树上,走j步,能得到的最大权值(0/1的表示会在转移方程中描述) 考虑:(此处参考dalao@zubizakeli ,侵删qwq)每…
从每个节点u出发后有两种情况:回到u和不回到u. dp数组设为三维,第一维是节点编号,第二维是从该节点开始走的步数,第三维1/0 表示是否回到该节点. 可以回到时:dp[u][j][1]=max(dp[u][j][1],dp[u][j-t][1]+dp[v][t-2][1]); 不能回到时,分为两种情况:1.最终停在v子树上 2.最终停在其他子树上. 1.dp[u][j][0]=max(dp[u][j][0],dp[u][j-t][1]+dp[v][t-1][0]); 2.dp[u][j][0]…
题目链接:https://vjudge.net/problem/POJ-2486 题意:一棵点权树,起点在1,求最多经过m条边的最大点权和. 思路: 树形dp经典题.用3维状态,dp[u][j][0/1]表示在子树u中走j步的最大价值(回到u/不回到u).显然dp[u][j][1]>=dp[u][j][0],所以dp[1][m][1]就是最终答案. 假设v为u的子结点,k为到v且在v中所用步数,那么转移方程分3步,为: dp[u][j][0]=max(dp[u][j][0] , dp[u][j-…
题目大意:一棵点带权有根树,根节点为1.从根节点出发,走k步,求能收集的最大权值和. 题目分析:从一个点向其某棵子树出发有三种可能的情况: 1.停留在那棵子树上: 2.再回到这个点: 3.经过这个点走向了其他分支: 定义状态dp(u,k,0/1)表示在u节点为根的子树上走k步并且不回/回到u的最大权值和.则状态转移方程为: dp(u,k,0)=max(dp(son,j-2,1)+dp(u,k-j,0),dp(u,k-j,1)+dp(son,j-1,0)) dp(u,k,1)=max(dp(son…
题意:有一颗苹果树,树上的u节点上有num[u]个苹果,树根为1号节点,囧king从根开始走,没走到一个节点就把接点上的苹果吃光,问囧king在不超过k步的情况下最多吃多少个苹果. 解题思路:处理出两个dp数组,f1[u][i]表示在不超过i步的情况下,从u节点开始,往下吃,吃完后回到u节点,最多能吃多少苹果.f2[u][i]表示在不超过i步的情况下,从u节点开始往下吃,最多能吃多少苹果. #include<stdio.h> #include<string.h> #include&…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4987 题解 一道还不错的题咯. 很容易发现一个结论:这 \(k\) 个点构成的一定是一个连通块,并且走的时候应该是按照某种类似于 dfs 的遍历方式连续走的. 可以发现,最终答案应该有:从根的某个子树走出来,到某个子树中去的这样的情况,也有可能是从根到某个子树中去的情况:同时,过程中会用到从根到子树中走一遍再回到根的情况.这三种情况都需要考虑. 于是进行树形 dp,令 \(dp[x][i][…
题目大意 给定一棵n个结点的树,每个结点上有一定数量的苹果,你可以从结点1开始走k步(从某个结点走到相邻的结点算一步),经过的结点上的苹果都可以吃掉,问你最多能够吃到多少苹果? 题解 蛋疼的问题就是可以往回走~~~~想N就木有想到解法,看了下网上的解题报告~~~~想到了其实还是挺容易理解的~~~分为两种情况,就是有些点只需要走一次,而有些则需要走两次. 方程表示: dp[0][u][j]表示从结点u开始走j步并且返回到结点u获得的最大价值 dp[1][u][j]表示从结点u开始走j步不回到结点u…