hdu 1011 Starship Troopers(树形背包)
Starship Troopers
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 20833 Accepted Submission(s):
5550
Problem Description
destroy a base of the bugs. The base is built underground. It is actually a huge
cavern, which consists of many rooms connected with tunnels. Each room is
occupied by some bugs, and their brains hide in some of the rooms. Scientists
have just developed a new weapon and want to experiment it on some brains. Your
task is to destroy the whole base, and capture as many brains as
possible.
To kill all the bugs is always easier than to capture their
brains. A map is drawn for you, with all the rooms marked by the amount of bugs
inside, and the possibility of containing a brain. The cavern's structure is
like a tree in such a way that there is one unique path leading to each room
from the entrance. To finish the battle as soon as possible, you do not want to
wait for the troopers to clear a room before advancing to the next one, instead
you have to leave some troopers at each room passed to fight all the bugs
inside. The troopers never re-enter a room where they have visited
before.
A starship trooper can fight against 20 bugs. Since you do not
have enough troopers, you can only take some of the rooms and let the nerve gas
do the rest of the job. At the mean time, you should maximize the possibility of
capturing a brain. To simplify the problem, just maximize the sum of all the
possibilities of containing brains for the taken rooms. Making such a plan is a
difficult job. You need the help of a computer.
Input
of each test case contains two integers N (0 < N <= 100) and M (0 <= M
<= 100), which are the number of rooms in the cavern and the number of
starship troopers you have, respectively. The following N lines give the
description of the rooms. Each line contains two non-negative integers -- the
amount of bugs inside and the possibility of containing a brain, respectively.
The next N - 1 lines give the description of tunnels. Each tunnel is described
by two integers, which are the indices of the two rooms it connects. Rooms are
numbered from 1 and room 1 is the entrance to the cavern.
The last test
case is followed by two -1's.
Output
sum of all the possibilities of containing brains for the taken rooms.
Sample Input
50 10
40 10
40 20
65 30
70 30
1 2
1 3
2 4
2 5
1 1
20 7
-1 -1
Sample Output
code
/*
hdu 1011
dp[i][j]:以i为根的树中,留下j个士兵,最大的收益。
*/
#include<cstdio>
#include<algorithm>
#include<cstring> using namespace std; const int MAXN = ; struct Edge{
int to,nxt;
}e[];
int head[],tot;
int val[MAXN],bg[MAXN],dp[MAXN][MAXN];
bool vis[MAXN];
int n,m; inline int read() {
int x = ,f = ;char ch = getchar();
for (; ch<''||ch>''; ch = getchar())
if (ch=='-') f = -;
for (; ch>=''&&ch<=''; ch = getchar())
x = x*+ch-'';
return x*f;
}
inline void add_edge(int u,int v) {
e[++tot].to = v,e[tot].nxt = head[u],head[u] = tot;
}
inline void init() {
memset(head,,sizeof(head));
memset(vis,false,sizeof(vis));
memset(dp,,sizeof(dp));
tot = ;
}
void dfs(int u) {
int tmp = (bg[u]+)/; // 对于当前点留下多少士兵
for (int i=tmp; i<=m; ++i) dp[u][i] = val[u]; // 留下tmp个以及tmp+1...都是一样的
vis[u] = true;
for (int i=head[u]; i; i=e[i].nxt) {
int v = e[i].to;
if (vis[v]) continue; // 不能搜回去
dfs(v);
for (int j=m; j>=tmp; --j)
for (int k=; k<=j-tmp; ++k)
dp[u][j] = max(dp[u][j],dp[u][j-k]+dp[v][k]);
}
}
int main() { while (scanf("%d%d",&n,&m)!=EOF && (n!=-||m!=-)) {
init();
for (int i=; i<=n; ++i) {
bg[i] = read(), val[i] = read();
}
for (int u,v,i=; i<n; ++i) {
u = read(),v = read();
add_edge(u,v),add_edge(v,u); // 当前不知道谁是谁的父亲儿子
}
if (m==) { // 别忘了特判,有这样的数据!!!
printf("0\n");continue;
}
dfs();
printf("%d\n",dp[][m]);
}
return ;
}
hdu 1011 Starship Troopers(树形背包)的更多相关文章
- 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
http://acm.hdu.edu.cn/showproblem.php?pid=1011 题意:每个节点有两个值bug和brain,当清扫该节点的所有bug时就得到brain值,只有当父节点被 ...
- 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(树上背包)
Problem Description You, the leader of Starship Troopers, are sent to destroy a base of the bugs. Th ...
- [HDU 1011] Starship Troopers (树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011 dp[u][i]为以u为根节点的,花了不超过i元钱能够得到的最大价值 因为题目里说要访问子节点必 ...
- HDU 1011 Starship Troopers 树形DP 有坑点
本来是一道很水的树形DP题 设dp[i][j]表示,带着j个人去攻打以节点i为根的子树的最大收益 结果wa了一整晚 原因: 坑点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/Others) ...
- hdu 1011 Starship Troopers 经典的树形DP ****
Starship Troopers Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
随机推荐
- PhpStorm 2017汉化补丁 2017.1 免费中文版
PhpStorm 2017汉化补丁是一款可以让PhpStorm 2017.1版实现中文界面显示的汉化包工具,本站提供了PhpStorm 2017.1汉化补丁下载地址,有需要的朋友们欢迎前来下载使用. ...
- O2O创业团队,遇到生死悠关的问题,希望大家支招?
简单概括下情况:公司名下有两个内部创业团队,A团队成立3年以上,现在模式基本成熟稳定,有固定营收,但是还未收支平衡:B团队O2O项目,成立5个月左右,还处于萌芽阶段,技术+运营+市场共计9名成员,现总 ...
- PHP实现正态分布的累积概率函数
在实际项目中,遇到需要正态分布算法去计算一个数值在整体的分布区间,例如: 100,90,80,70,60,50,40,30,20,10共10个数,按从高到低的顺序排序,总数的10%分布区域为极高频, ...
- Python+selenium之调用JavaScript
webdriver提供了操作浏览器的前进和后退的方法,但是对于浏览器公东条并没有提供相应的操作方法.于是就需要借助JavaScript来控制浏览器的滚动条.webdriver提供了execute_sr ...
- Modelsim与Simulink协同仿真
当使用硬件描述语言(HDL)完成电路设计时,往往需要编写Testbench对所设计的电路进行仿真验证,测试设计电路的功能是否与预期的目标相符.而编写Testbench难度之大,这时可以借助交互式图形化 ...
- 设置DataGridView单元格的文本对齐方式
实现效果: 知识运用: DataGridViewCellStyle类的Alignment属性 //获取或设置DataGridView单元格内的单元格内容的位置 public DataGridV ...
- Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'fundService': Injection of resource dependencies failed;
在进行SSM的Controller的编写, 从浏览器访问后端Controller的时候遇到了这个问题. 这个问题的描述: 创建Bean的对象失败 错误代码如下: @Service("fund ...
- Java 从资源文件(.properties)中读取数据
在Java工程目录src下,创建一个后缀为.properties的文件,例如db.properties 文件中的内容如下(键=值): name=mk age=123 address=China 在程序 ...
- 【启发式拆分】bzoj4059: [Cerc2012]Non-boring sequences
这个做法名字是从武爷爷那里看到的…… Description 我们害怕把这道题题面搞得太无聊了,所以我们决定让这题超短.一个序列被称为是不无聊的,仅当它的每个连续子序列存在一个独一无二的数字,即每个子 ...
- MyBatis逆向工程中的Mapper接口以及Example的实例函数及详解
一.mapper接口中的方法解析 mapper接口中的函数及方法 方法 功能说明 int countByExample(UserExample example) thorws SQLException ...