[HDU 1011] Starship Troopers (树形dp)
题目链接: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)的更多相关文章
- hdu 1011 Starship Troopers(树形DP入门)
Starship Troopers Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 1011 Starship Troopers 树形DP 有坑点
本来是一道很水的树形DP题 设dp[i][j]表示,带着j个人去攻打以节点i为根的子树的最大收益 结果wa了一整晚 原因: 坑点1: 即使这个节点里面没有守卫,你如果想获得这个节点的收益,你还是必须派 ...
- hdu 1011 Starship Troopers 树形背包dp
Starship Troopers Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hdu 1011 Starship Troopers(树形背包)
Starship Troopers Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 1011 Starship Troopers 树形+背包dp
http://acm.hdu.edu.cn/showproblem.php?pid=1011 题意:每个节点有两个值bug和brain,当清扫该节点的所有bug时就得到brain值,只有当父节点被 ...
- HDU 1011 Starship Troopers (树dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011 题意: 题目大意是有n个房间组成一棵树,你有m个士兵,从1号房间开始让士兵向相邻的房间出发,每个 ...
- 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 ...
- hdu 1011 Starship Troopers 经典的树形DP ****
Starship Troopers Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hdu 1011(Starship Troopers,树形dp)
Starship Troopers Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
随机推荐
- 简单了解ddos攻击
1.一种为流量攻击,主要是针对网络带宽的攻击,即大量攻击包导致网络带宽被阻塞,合法网络包被虚假的攻击包淹没而无法到达主机: 2.另一种为资源耗尽攻击,主要是针对服务器主机的攻击,即通过大量攻击包导致主 ...
- Long 陷阱
String str = "10"; System.out.print(Long.getLong(str)); System.out.print(Long.valueOf(str) ...
- [mysql] mysql 5.6.27 innodb 相关参数
mysql> show variables like '%innodb%';+------------------------------------------+--------------- ...
- scala pattern matching
scala语言的一大重要特性之一就是模式匹配.在我看来,这个怎么看都很像java语言中的switch语句,但是,这个仅仅只是像(因为有case关键字),他们毕竟是不同的东西,switch在java中, ...
- noaman日志第一条:2015-1024;“Hello.World”
在南京的不知道第几个周末,一夜的煎熬终于活过来了.清早起来开通了自己的博客,第一条说说就记录开通博客这个事件.没有别的. 之后我会着重记录每天看书内容,以及所要编写的重要程序,一点一滴地积累希望能收获 ...
- node.js的作用、回调、同步异步代码、事件循环
http://www.nodeclass.com/articles/39274 一.node.js的作用 I/O的意义,(I/O是输入/输出的简写,如:键盘敲入文本,输入,屏幕上看到文本显示输出.鼠标 ...
- 【MySQL】原理 之 事务
1.MySQL逻辑架构大致分为:连接认证层,核心服务层,存储引擎层. 2.锁策略,需要在开销和数据的安全性之间寻求平衡,这种平衡会影响到性能. 3.写锁优先于读锁. 4.行级锁只在存储引擎层实现,而M ...
- 26种提高ASP.NET网站访问性能的优化方法 .
1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池 ...
- Form_Form Builder开发基于视图页面和自动代码生成包(案例)
2014-01-06 Created By BaoXinjian
- DBA_在Linux上安装Oracle Database11g数据库(案例)
2014-08-08 Created By BaoXinjian