HDU 1011 Starship Troopers星河战队(树形dp)
题意
有n个洞穴编号为1~n,洞穴间有通道,形成了一个n-1条边的树, 洞穴的入口即根节点是1。
每个洞穴有x只bugs,并有价值y的金子,全部消灭完一个洞穴的虫子,就可以获得这个洞穴的y个金子.
现在要派m个战士去找金子,从入口进入。每次只有消灭完当前洞穴的所有虫子,才可以选择进入下一个洞穴。
一个战士可以消灭20只虫子,如果要杀死x只虫子,那么要x/20向上取整即(x+19)/20个战士。
如果要获得某个洞穴的金子,必须留下足够杀死所有虫子的战士数量, 即(x+19)/20个战士,然后这些留下战士就不能再去其它洞穴
其他战士可以继续走去其它洞穴,可以选择分组去不同的洞穴。
战士只能往洞穴深处走,不能走回头路。
问最多能获得多少金子?
思路:
基础的树形DP。
要特别注意的是,如果某个节点的bug数为0,而金子不为0,那么仍然需要派1个人以上去捡,而不是花0个士兵就能获得该点的金子。
#include <bits/stdc++.h>
using namespace std;
const int N=;
vector<int> vect[N];
int bug[N], num[N], dp[N][N], n, m; void DFS(int t,int far,int peo)
{
int need=(bug[t]+)/;
if(peo<need || peo==) return ; for(int i=need; i<=peo; i++) dp[t][i]=num[t]; //若有士兵i>=need个,那么起码拿到本节点的金子
for(int i=; i<vect[t].size(); i++)
{
int to=vect[t][i];
if(to^far)
{
DFS(to, t, peo-need);
for(int j=peo; j>need; j--) //到达本节点可能的人数。
for(int k=; k<=j-need; k++) //给孩子to分配k个士兵。
dp[t][j]=max(dp[t][j],dp[t][j-k]+dp[to][k]);
}
}
} int main()
{
freopen("input.txt","r",stdin);
int u,v;
while(scanf("%d%d",&n,&m), n+m>)
{
for(int i=; i<=n; i++) vect[i].clear();
memset(dp,,sizeof(dp)); for(int i=; i<=n; i++) //房间里的bug数、金子
scanf("%d%d",&bug[i],&num[i]);
for(int i=; i<n; i++) //连通情况
{
scanf("%d%d",&u,&v);
vect[u].push_back(v);
vect[v].push_back(u);
}
DFS(, -, m);
printf("%d\n", dp[][m]);
}
return ;
}
AC代码
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/有依赖的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/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 有坑点
本来是一道很水的树形DP题 设dp[i][j]表示,带着j个人去攻打以节点i为根的子树的最大收益 结果wa了一整晚 原因: 坑点1: 即使这个节点里面没有守卫,你如果想获得这个节点的收益,你还是必须派 ...
- hdu 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 Starship Troopers(树上背包)
Problem Description You, the leader of Starship Troopers, are sent to destroy a base of the bugs. Th ...
随机推荐
- swift中的类拓展 extension
以添加颜色为例,new 一个swift文件夹 不是cocoa类 也不需要继承什么. 然后 import UIKit protocol ColorDalegate{ class func mainCol ...
- Sharepoint商务智能学习笔记之Powerpivot Service Dmeo(八)
1)在Excel上添加Powerpivot工具栏 第一步,在Excel中启用Powerpivot 工具栏,新建一个空白Excel文件,在左上角点击文件,然后点击选项 2)使用Powerpivot添加数 ...
- 如何在MySQL中设置外键约束
引用:http://blog.sina.com.cn/s/blog_53729e4601011wja.html MySql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个: 一个是 ...
- webpack -- 多页面简单小例
有时单页面并不能满足我们的业务需求,就需要去构建多页面应用,以下为简单小例: entry:{ index:'./src/module/index/index.js', student:'./src/m ...
- 51nod1043(数位dp)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1043 题意:中文题诶- 思路:数位dp 我们用dp[i][j ...
- Google Guetzli是如何压缩图片的?
你可能已经知道,现在网页文件的平均大小比Doom游戏的安装文件还还大. 文件变大的原因之一是图片的增加,并且还需要支持更高的分辨率. Google来拯救了 Google刚刚发布了一种新的JPEG压缩算 ...
- AngularJs1.X学习--路由
[三种使用说明:] $stateProvider.state('station.printQRCode', { //params: { 'parentOfficeId': null }, //一次性参 ...
- uoj455 【UER #8】雪灾与外卖
http://uoj.ac/problem/455 题解: https://blog.csdn.net/litble/article/details/88410435 https://www.mina ...
- TcxGrid Column动态添加Image
MyCol := TcxColumn.Create; ... MyCol.PropertiesClass := TcxImageProperties; ImageProps := TcxImagePr ...
- 一步一步在Windows中使用MyCat负载均衡
一步一步在Windows中使用MyCat负载均衡 http://www.cnblogs.com/zhangs1986/p/6408981.html mycat+sqlServer简单demo配置 ...