题目大意:给一棵有根带点权树,并且给出容量。求在不超过容量下的最大权值。前提是选完父节点才能选子节点。

题目分析:树上的分组背包。

ps:特判m为0时的情况。

代码如下:

  1. # include<iostream>
  2. # include<cstdio>
  3. # include<vector>
  4. # include<cstring>
  5. # include<algorithm>
  6. using namespace std;
  7.  
  8. const int N=105;
  9. const int INF=1000000000;
  10.  
  11. int n,m;
  12. int bug[N];
  13. int w[N];
  14. int dp[N][N];
  15. vector<int>e[N];
  16.  
  17. void init()
  18. {
  19. memset(dp,0,sizeof(dp));
  20. for(int i=1;i<=n;++i){
  21. scanf("%d%d",bug+i,w+i);
  22. e[i].clear();
  23. }
  24. int a,b;
  25. for(int i=1;i<n;++i){
  26. scanf("%d%d",&a,&b);
  27. e[a].push_back(b);
  28. e[b].push_back(a);
  29. }
  30. }
  31.  
  32. int getTroopers(int x)
  33. {
  34. return (x+19)/20;
  35. }
  36.  
  37. int dfs(int u,int fa)
  38. {
  39. int x=getTroopers(bug[u]);
  40. for(int i=x;i<=m;++i)
  41. dp[u][i]=w[u];
  42. for(int i=0;i<e[u].size();++i){
  43. int v=e[u][i];
  44. if(v==fa) continue;
  45. dfs(v,u);
  46. for(int j=m;j>=x;--j){
  47. for(int k=1;k<=j-x;++k){
  48. dp[u][j]=max(dp[u][j],dp[v][k]+dp[u][j-k]);
  49. }
  50. }
  51. }
  52. }
  53.  
  54. void solve()
  55. {
  56. if(m==0)
  57. printf("0\n");
  58. else{
  59. dfs(1,-1);
  60. printf("%d\n",dp[1][m]);
  61. }
  62. }
  63.  
  64. int main()
  65. {
  66. while(~scanf("%d%d",&n,&m)&&(n!=-1||m!=-1))
  67. {
  68. init();
  69. solve();
  70. }
  71. return 0;
  72. }

  

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)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011 dp[u][i]为以u为根节点的,花了不超过i元钱能够得到的最大价值 因为题目里说要访问子节点必 ...

  4. hdu 1011 Starship Troopers 树形背包dp

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

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

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

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

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

  7. HDU 1011 Starship Troopers (树dp)

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

  8. 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 ...

  9. hdu 1011 Starship Troopers (树形背包dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接 : hdu-1011   题意 有n个洞穴编号为1-n,洞穴间有通道,形成了一个n-1条边的树, 洞穴的入口即 ...

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

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

随机推荐

  1. key 4v4

    #include "key4v4.h" #include "stm32f10x.h" #include "delay.h" /* PA4-L ...

  2. Python开发入门与实战2-第一个Django项目

    2.第一个Django项目 上一章节我们完成了python,django和数据库等运行环境的安装,现在我们来创建第一个django project吧,迈出使用django开发应用的第一步. 2.1.创 ...

  3. 数组的filter方法

    filter()函数用于过滤序列,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素. eg: var arr=[10,11,12,13,14 ...

  4. ALAssets的两种用法

    一: ALAssetsGroupEnumerationResultsBlock resultsBlock = ^(ALAsset *result, NSUInteger index, BOOL *st ...

  5. DDOS攻击原理及防护方法论

      从 07年的爱沙尼亚DDOS信息战,到今年广西南宁30个网吧遭受到DDOS勒索,再到新浪网遭受DDOS攻击无法提供对外服务500多分钟. DDOS愈演愈烈,攻击事件明显增多,攻击流量也明显增大,形 ...

  6. Windows下adb push 总是提示Failed to copy "XX.apk" to 'system/app':Read-only file system

    一般情况看到这种提示我们会想到需要root权限,然后敲上adb remount,但是当我们执行过adb remount后,提示成功,但执行push命令依旧无法完成push. 那么此时我们的做法应该是重 ...

  7. ubuntu添加共享出错

    早上设置一个共享目录share. 右键共享,之后系统自动安装软件samba,之后共享出错: "net usershare"返回错误 255:net usershare: canno ...

  8. yii2 单页面增删改

    视图层 <style>#tab tr td{    height:40px;    width:100px;}</style><form action="ind ...

  9. grunt 执行

    几天以前,我决定开始启用一个CSS预处理器,找了很久,我选择了SASS并且尝试着去安装它.但是这似乎不是一件简单的事,在安装过程中出现了许多让我始料不及的问题,我很沮丧,但查找了很多资料,我终于找到了 ...

  10. IO复用(Reactor模式和Preactor模式)——用epoll来提高服务器并发能力

    上篇线程/进程并发服务器中提到,提高服务器性能在IO层需要关注两个地方,一个是文件描述符处理,一个是线程调度. IO复用是什么?IO即Input/Output,在网络编程中,文件描述符就是一种IO操作 ...