#include <iostream>
#include <cstring>
#include <deque>
using namespace std; #define SIZE 230
#define BACK 1
#define AWAY 0 int DP[SIZE][SIZE][2];
bool visits[SIZE];
int vals[SIZE];
deque< int > tree[SIZE]; int num, steps; void dfs( int u ){ visits[u] = true;
const int len = tree[u].size(); for( int i = 0; i <= steps; ++i )
DP[u][i][BACK] = DP[u][i][AWAY] = vals[u]; for( int i = 0; i < len; ++i ){ int son = tree[u][i]; if( visits[son] )
continue; dfs( son ); for( int s = steps; s >= 0; --s ){
for( int ss = 0; ss <= s; ++ss ){
/*
从 u 出发,回到 u。须要多走两步 u->son,son->u,
分配给 son 子树 ss 步,其它子树 s - ss 步。都返回.
*/
DP[u][s + 2][BACK] = max( DP[u][s + 2][BACK],
DP[u][s - ss][BACK] + DP[son][ss][BACK] ); /*
不回 u (去 u 的其它子树)。在 son 返回.
*/
DP[u][s + 2][AWAY] = max( DP[u][s + 2][AWAY],
DP[u][s - ss][AWAY] + DP[son][ss][BACK] ); /*
先遍历 u 的其它子树,回到 u 后,遍历 son 子树,
在当前子树 son 不返回,多走一步.
*/
DP[u][s + 1][AWAY] = max( DP[u][s + 1][AWAY],
DP[u][s - ss][BACK] + DP[son][ss][AWAY] ); }
}
}
} int main(){ int u, v; while( cin >> num >> steps ){ memset( DP, 0, sizeof( DP ) );
memset( visits, false, sizeof( visits ) ); for( int i = 1; i <= num; ++i )
tree[i].clear(); for( int i = 1; i <= num; ++i )
cin >> vals[i]; for( int i = 1; i <= num - 1; ++i ){ cin >> u >> v; tree[u].push_back( v );
tree[v].push_back( u ); } dfs( 1 ); cout << max( DP[1][steps][BACK], DP[1][steps][AWAY] ) << endl; } return 0; }

POJ 2486 Apple Tree ( 树型DP )的更多相关文章

  1. POJ 2486 Apple Tree [树状DP]

    题目:一棵树,每个结点上都有一些苹果,且相邻两个结点间的距离为1.一个人从根节点(编号为1)开始走,一共可以走k步,问最多可以吃多少苹果. 思路:这里给出数组的定义: dp[0][x][j] 为从结点 ...

  2. POJ 2486 Apple Tree(树形dp)

    http://poj.org/problem?id=2486 题意: 有n个点,每个点有一个权值,从1出发,走k步,最多能获得多少权值.(每个点只能获得一次) 思路: 从1点开始,往下dfs,对于每个 ...

  3. POJ 2486 Apple Tree (树形DP,树形背包)

    题意:给定一棵树图,一个人从点s出发,只能走K步,每个点都有一定数量的苹果,要求收集尽量多的苹果,输出最多苹果数. 思路: 既然是树,而且有限制k步,那么树形DP正好. 考虑1个点的情况:(1)可能在 ...

  4. poj 2486 Apple Tree(树形DP 状态方程有点难想)

    Apple Tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9808   Accepted: 3260 Descri ...

  5. POJ 2486 Apple Tree

    好抽象的树形DP......... Apple Tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6411 Accepte ...

  6. POJ 3321 Apple Tree(树状数组)

                                                              Apple Tree Time Limit: 2000MS   Memory Lim ...

  7. POJ 1947 - Rebuilding Roads 树型DP(泛化背包转移)..

    dp[x][y]表示以x为根的子树要变成有y个点..最少需要减去的边树... 最终ans=max(dp[i][P]+t)  < i=(1,n) , t = i是否为整棵树的根 > 更新的时 ...

  8. POJ 2486 Apple Tree ——(树型DP)

    题意是给出一棵树,每个点都有一个权值,从1开始,最多走k步,问能够经过的所有的点的权值和最大是多少(每个点的权值只能被累加一次). 考虑到一个点可以经过多次,设dp状态为dp[i][j][k],i表示 ...

  9. POJ 2486 Apple Tree(树形DP)

    题目链接 树形DP很弱啊,开始看题,觉得貌似挺简单的,然后发现貌似还可以往回走...然后就不知道怎么做了... 看看了题解http://www.cnblogs.com/wuyiqi/archive/2 ...

随机推荐

  1. ZOJ 2770 Burn the Linked Camp(spfa&&bellman)

    //差分约束 >=求最长路径 <=求最短路径 结果都一样//spfa#include<stdio.h> #include<string.h> #include< ...

  2. iOS 中UITableViewController 中tableView 会被状态栏覆盖的问题

    解决办法在 生命周期函数viewDidAppear中设置即可 - (void)viewDidAppear:(BOOL)animated { self.tableView.frame = CGRectM ...

  3. 五子棋Web版的开发(一)---搭建IDEA SSH环境

    最近公司都没啥事,我在完成了控制台版的本地五子棋后(github地址:https://github.com/lkq51/wuziqi_console2),想将他升级成为一个web版的五子棋游戏.因为公 ...

  4. JSP 中动态 INCLUDE 与静态 INCLUDE 的区别?

    一.静态包含指令<%@include file="fileurl"%> 两个jsp页面的<%@page contentType="text/html:c ...

  5. jsp 有哪些内置对象?作用分别是什么? 分别有什么方 法?

    JSP共有以下9种基本内置组件 request对象          客户端请求,此请求包含来自GET/POST的请求参数,通过它才能了解到客户的需求,然后做出相应. response对象       ...

  6. 驱动之路四------adc驱动(input设备)

    开发板:smdk6410 开发环境:Linux 突然想起一点,写这些驱动,内核需要配成支持抢占才行. 前面的博客已经将其它的基本知识都解释了,这里也就不过多的阐述了,咱就直接写代码吧 这次写的是adc ...

  7. javascript模块化编程(转载)

    Javascript 模块化编程 作者: 阮一峰  发布时间: 2013-01-08 18:04  阅读: 7632 次  推荐: 40   原文链接   [收藏]   随着网站逐渐变成"互 ...

  8. 【转】C++ stringstream介绍,使用方法与例子

    原文来自:http://www.cnblogs.com/lancidie/archive/2010/12/03/1895161.html C++引入了ostringstream.istringstre ...

  9. 使用 dotnet watch 开发 ASP.NET Core 应用程序

    使用 dotnet watch 开发 ASP.NET Core 应用程序 原文:Developing ASP.NET Core applications using dotnet watch作者:Vi ...

  10. RII K25A 语音空中飞鼠 红外学习步骤

    1.按住多功能遥控器上的SET按键,超过4秒不要放手,LED指示灯会闪一次,然后长亮.2.将多功能遥控器的红外口对准你原来的遥控器的红外口,然后按RII多功能遥控器面上任何按钮,上面灯将会闪动,闪动过 ...