poj 2486 (树形DP)

这是一篇关于利用树形动态规划解决POJ 2486题目的博客。题目描述了一棵苹果树,人从节点1出发,最多走K步,目标是获取最多苹果。难点在于处理走回头路的情况。博主提出的状态方程包括d[u][j][0](人在u点)和d[u][j][1](人不在u点),并给出了求解最大苹果数的方法。
摘要由CSDN通过智能技术生成

poj 2486

题目:http://poj.org/problem?id=2486

题意:有一棵树,每个节点有一些苹果,人从1号节点出发,最多走K步,问你最多能吃到多少苹果。

思路:很好的一道题。俗话说好马不吃回头草,这道题目的难点就在于看到走回头路,并如何处理好这个DP。如果不用考虑走回头路,那么这题也太简单了吧,第一遍我就是这么做的 ,  = = WA了。。 考虑回头路,那么需要增设一维,表示人还在不在该节点。状态方程为:

d[u][j][0] = max(d[v][k][0]+d[u][j-k-2][0],d[u][j][0]);
d[u][j][1] = max(d[v][k][1]+d[u][j-k-1][0],d[u][j][1]);
d[u][j][1] = max(d[v][k][0]+d[u][j-k-2][1],d[u][j][1]);

d[u][j][0]表示以u为根节点的子树,走了j步,并且走完后人还留在u点。d[u][j][1]表示人不在u点了。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;

const int MAXN = 111 ;

const int INF = 0x0ff
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值