poj2486——apple tree

题目大意:一颗树n个结点,n-1条边,每个结点有不同个数的苹果,在只能走V步(即经过V条边)的前提下,问从结点1出发最多能吃到多少苹果

输入:n V(1<=n<=100,0<=V<=200)(结点符号为1 2 ...)

           结点i的苹果个数(n个数,之间有空格)

           结点i 结点j(表示ij之间有一条边)(有n-1行)

输出:吃到的最多苹果个数

分析:树形动态规划,相当于一个背包问题,能走的步数相当于背包容量,每个结点有多少苹果相当于价值。

           状态:dp[0][s][j]表示以s为根的子树上走j步,最终回到s所得的最大价值

                      dp[1][s][j]表示以s为根的子树上走j步,最终不回到s所得的最大价值

           结果:dp[1][1][V]

           状态转移方程:从s点出发有三种决策(t为s的其中一个孩子)

                                    ①最终状态回到s点:s到t,遍历完t子树,从t返回回到s。

                                        dp[0][s][j+2]=max{dp[0][s][j+2],dp[0][t][k]+dp[0][s][j-k]}

                                        s->t,t->s多出两步                          分配给t子树k步  剩下的j-k步给s的其他子树

                                    ②最终状态在s的其他子树待着:s到t,遍历完t子树,从t返回经过s走向s的其他子树

                                        dp[1][s][j+2]=max{dp[1][s][j+2],dp[0][t][k]+dp[1][s][j-k]}

                                    ③最终状态在t子树上待着:s到其他子树,遍历完这些子树后返回,经过s走向t,不返回t

                                        dp[1][s][j+1]=max{dp[1][s][j+1],dp[0][s][j-k]+dp[1][t][k]}

代码:转载自http://www.cnblogs.com/wuyiqi/archive/2012/01/09/2316758.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值