Starship Troopers
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.
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.
sum of all the possibilities of containing brains for the taken rooms.
#include"iostream"
#include"vector"
#include"cstring"
using namespace std;
const int size=;
int r,t;
int cost[size],brain[size];
int dp[size][size];
vector<int> adj[size];
void dfs(int p,int pre);
int main()
{
while(cin>>r>>t)
{
if(r==-&&t==-)
break;
int bug,a,b,i;
for(i=;i<r;i++)
{
cin>>bug>>brain[i];
cost[i]=(bug+)/;
}
for(i=;i<r;i++)
{
adj[i].clear();
}
for(i=;i<r-;i++)
{
cin>>a>>b;
adj[a-].push_back(b-);
adj[b-].push_back(a-);
}
if(t==)
{
cout<<''<<endl;
continue;
}
memset(dp,,sizeof(dp));
dfs(,-);
cout<<dp[][t]<<endl;
}
return ;
}
void dfs(int p,int pre)
{
for(int i=cost[p];i<=t;i++)
{
dp[p][i]=brain[p];
}
int num=adj[p].size();
for(int i=;i<num;i++)
{
int v=adj[p][i];
if(v==pre)
continue;
dfs(v,p);
for(int j=t;j>=cost[p];j--)
for(int k=;k<=j-cost[p];k++)
{
if(dp[p][j]<dp[p][j-k]+dp[v][k])
{
dp[p][j]=dp[p][j-k]+dp[v][k];
}
}
}
}
Starship Troopers的更多相关文章
- HD 1011 Starship Troopers(树上的背包)
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 树形背包(DP) Starship Troopers
题目链接: HDU 1011 树形背包(DP) Starship Troopers 题意: 地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...
- 杭电OJ——1011 Starship Troopers(dfs + 树形dp)
Starship Troopers Problem Description You, the leader of Starship Troopers, are sent to destroy a ba ...
- 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/Other ...
- 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 ...
- 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 ...
随机推荐
- 一起刷LeetCode1-Two Sum
感觉有必要重新刷刷题了,为以后找工作做做准备,选择LeetCode+topcoder上的Data Science Tutorials, 争取每天晚上10:00开始刷一道,复习一下相关知识点. ---- ...
- 题目1437:To Fill or Not to Fill:贪心算法解决加油站选择问题(未解决)
//贪心算法解决加油站选择问题 //# include<iostream> # include<stdio.h> using namespace std; # include& ...
- Codeforces 372
A (被装的袋鼠不可以装的袋鼠)贪心,排序,从n/2分成两部分. B 好一道前缀和的题目. C 标准算法不难想,m^2的算法见http://codeforces.com/blog/entry/9907 ...
- jira部署,主机迁移,数据库迁移,jira
1,linux环境下快速部署; wget http://wpc.29c4.edgecastcdn.net/8029C4/downloads/software/jira/downloads/atlass ...
- angularjs ng-class 两种用法
ng-class="{'active':current.actived_tree==item}" ng-class="{true:'label-danger white- ...
- Struts2 文件上传
一:表单准备 ① 要想使用HTML 表单上传一个或多个文件 –须把 HTML表单的 enctype属性设置为multipart/form-data –须把HTML 表单的method ...
- POJ 3169 Layout (差分约束系统)
Layout 题目链接: Rhttp://acm.hust.edu.cn/vjudge/contest/122685#problem/S Description Like everyone else, ...
- 应用Java泛型和反射导出CSV文件
项目中有需求要把数据导出为CSV文件,因为不同的类有不同的属性,为了代码简单,应用Java的泛型和反射,写了一个函数,完成导出功能. public <T> void saveFile(Li ...
- jpa仓库接口
可以使用的仓库接口有: Repository: 是 Spring Data的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法. CrudRepository: 继承Repos ...
- 从 ALAsset 中取出属性
#pragma mark - 从相册数组中取出所有的 图片数据 -(NSMutableArray *)getImageFromAlbumArray:(NSArray *)albumArr { NSMu ...