题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011

dp[u][i]为以u为根节点的,花了不超过i元钱能够得到的最大价值

因为题目里说要访问子节点必须先访问根节点,所以

dp[u][i+j] = max(dp[u][i],dp[u][i]+dp[v][j]); v是u的儿子节点。

代码:

 import java.util.*;
import static java.lang.Math.*; class Graph{
ArrayList<ArrayList<Integer>> e;
int dp[][];
boolean vis[];
int n,m;
public Graph(int n,int m){
e = new ArrayList<ArrayList<Integer>>();
for(int i=0;i<=n;i++){
e.add(new ArrayList<Integer>());
}
dp = new int[n+1][m+1];
vis = new boolean[n+1];
this.n = n;
this.m = m;
} public void add_edge(int from,int to){
ArrayList<Integer> t = e.get(from);
t.add(to);
} public int dfs(int u){
if( vis[u] ) return 0;
vis[u] = true; ArrayList<Integer> t = e.get(u); for(int i=m;i>=Main.w[u];i--) dp[u][i] = Main.v[u]; for(int s:t ){
if( vis[s] ) continue;
dfs(s); for(int i=m;i>=Main.w[u];i--){
for(int j=1;j<=m;j++){
if( i+j<=m ){
dp[u][i+j] =max(dp[u][i+j], dp[u][i]+dp[s][j]);
}
}
}
}
return dp[u][m];
} } public class Main{
static int N,M;
static Scanner sc = new Scanner(System.in);
static int w[],v[];
public static void main(String[] args){
while( sc.hasNext() ){ N = sc.nextInt();
M = sc.nextInt(); if( N==-1 && M==-1 ) break; w = new int[N+1];
v = new int[N+1]; Graph g = new Graph(N,M); for(int i=1;i<=N;i++){
w[i] = sc.nextInt();
v[i] = sc.nextInt();
w[i] = (w[i]+19)/20;
} for(int i=1;i<N;i++){
int a = sc.nextInt();
int b = sc.nextInt();
g.add_edge(a,b);
g.add_edge(b,a);
} if( M==0 ){
System.out.println(0);
continue;
} int ans = g.dfs(1);
System.out.println(ans); } } }

[HDU 1011] Starship Troopers (树形dp)的更多相关文章

  1. hdu 1011 Starship Troopers(树形DP入门)

    Starship Troopers Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  2. HDU 1011 Starship Troopers 树形DP 有坑点

    本来是一道很水的树形DP题 设dp[i][j]表示,带着j个人去攻打以节点i为根的子树的最大收益 结果wa了一整晚 原因: 坑点1: 即使这个节点里面没有守卫,你如果想获得这个节点的收益,你还是必须派 ...

  3. hdu 1011 Starship Troopers 树形背包dp

    Starship Troopers Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  4. hdu 1011 Starship Troopers(树形背包)

    Starship Troopers Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  5. HDU 1011 Starship Troopers 树形+背包dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1011   题意:每个节点有两个值bug和brain,当清扫该节点的所有bug时就得到brain值,只有当父节点被 ...

  6. HDU 1011 Starship Troopers (树dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011 题意: 题目大意是有n个房间组成一棵树,你有m个士兵,从1号房间开始让士兵向相邻的房间出发,每个 ...

  7. HDU 1011 Starship Troopers【树形DP/有依赖的01背包】

    You, the leader of Starship Troopers, are sent to destroy a base of the bugs. The base is built unde ...

  8. hdu 1011 Starship Troopers 经典的树形DP ****

    Starship Troopers Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  9. hdu 1011(Starship Troopers,树形dp)

    Starship Troopers Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...

随机推荐

  1. JQuery Pagenation 知识点整理——(function($){...})应用(20150517)

    首先:(function($){...})为Jquery提供的匿名函数: 代码实例(一) <script type="text/javascript"> (functi ...

  2. android虚拟机(ROOT)权限

    自己找的一个比较好用的pc端安卓模拟器,蓝手指总所周知吧,这个是较高版本但不是最新的一个版本,关键是自带root功能,对于破解安卓存档类游戏还是有用的.安卓版本4.4.2 BlueStacks 0.9 ...

  3. Oracle 支持正则表达式的函数

    内容提要 oracle 10g 增加的正则表达式函数有以下四种: regexp_like() --返回满足条件的字段 regexp_instr() --返回满足条件的字符或字符串的位置 regexp_ ...

  4. eclipse打包jar文件(含外部jar包)的方法

    在项目发布前,使用eclipse导出普通的jar包时,如果配置不好,在运行命令Java -jar /test.jar 时可能会出现如下三类错误信息: 1.no main manifest attrib ...

  5. [java]序列化框架性能对比(kryo、hessian、java、protostuff)

    序列化框架性能对比(kryo.hessian.java.protostuff) 简介:   优点 缺点 Kryo 速度快,序列化后体积小 跨语言支持较复杂 Hessian 默认支持跨语言 较慢 Pro ...

  6. 【shell】case语句

    case只能判断一种条件关系,而if能判断多种条件关系 #!/bin/bash read -p "please input your choice (high/middle/low):&qu ...

  7. 使用 Windows PowerShell 来管理和开发 windowsazure.cn 账户的特别注意事项

    6月6日,微软面向中国大陆用户开放了Microsoft Azure公众预览版的申请界面.大家可以申请免费的 beta 试用,收到内附邀请码的通知邮件后只需输入激活码即可开始免费试用.具体网址为: ht ...

  8. 【Java编程进阶-1】enum枚举的使用

    枚举主要用于枚举常量,下面举个简单的应用. 比如一个公司有如下几个部门: 研发部: 销售部: 财务部: (其他部门暂时不列举) 部门的某些信息相对固定,此时可以考虑使用枚举来说明: 枚举类 Depts ...

  9. Redis资料汇总专题

    1.Redis是什么? 十五分钟介绍 Redis数据结构 Redis系统性介绍 一个很棒的Redis介绍PPT 强烈推荐!非同一般的Redis介绍 Redis之七种武器 锋利的Redis redis ...

  10. [Debug]驱动程序调测方法与技巧

    转自:http://blog.csdn.net/lichangc/article/details/43272457 驱动程序开发的一个重大难点就是不易调试.本文目的就是介绍驱动开发中常用的几种直接和间 ...