题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011

题意:

题目大意是有n个房间组成一棵树,你有m个士兵,从1号房间开始让士兵向相邻的房间出发,每个房间里有一个代价,代价是值/20个士兵,

同时有一个价值,问你花费这m个士兵可以得到的最大价值是多少。

思路:

树上背包,这题比较坑爹。士兵为0,输出0。要是一个房间的cost不足20的倍数也要补全20的倍数。

dp[i][j]表示以i节点为子树的root使用j个士兵的最大价值( 不用管父节点 ),dp[i][j] = max(dp[i][j] , dp[i.son][k] + dp[i][j - k])

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <vector>
  5. using namespace std;
  6. const int N = ;
  7. int cost[N], val[N];
  8. vector <int> G[N];
  9. int dp[N][N], n, m;
  10.  
  11. void dfs(int u, int p) {
  12. int temp = (cost[u] + ) / ;
  13. if(temp > m)
  14. return ;
  15. for(int i = temp; i <= m; ++i) {
  16. dp[u][i] = val[u];
  17. }
  18. for(int i = ; i < G[u].size(); ++i) {
  19. int v = G[u][i];
  20. if(v == p)
  21. continue;
  22. dfs(v, u);
  23. for(int j = m; j >= temp + ; --j) { //类似背包 每个可取的值只枚举一次
  24. for(int k = temp; k < j; ++k) { //每条路径上会保证有一个士兵
  25. dp[u][j] = max(dp[u][j], dp[u][k] + dp[v][j - k]);
  26. }
  27. }
  28. }
  29. }
  30.  
  31. int main()
  32. {
  33. while(~scanf("%d %d", &n, &m)) {
  34. if(m == - && n == -)
  35. break;
  36. memset(dp, , sizeof(dp));
  37. for(int i = ; i <= n; ++i) {
  38. G[i].clear();
  39. scanf("%d %d", cost + i, val + i);
  40. }
  41. int u, v;
  42. for(int i = ; i < n; ++i) {
  43. scanf("%d %d", &u, &v);
  44. G[u].push_back(v);
  45. G[v].push_back(u);
  46. }
  47. dfs(, -);
  48. if(!m) {
  49. printf("0\n");
  50. } else {
  51. printf("%d\n", dp[][m]);
  52. }
  53. }
  54. return ;
  55. }

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)

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

  3. HDU 1011 Starship Troopers 树形DP 有坑点

    本来是一道很水的树形DP题 设dp[i][j]表示,带着j个人去攻打以节点i为根的子树的最大收益 结果wa了一整晚 原因: 坑点1: 即使这个节点里面没有守卫,你如果想获得这个节点的收益,你还是必须派 ...

  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【树形DP/有依赖的01背包】

    You, the leader of Starship Troopers, are sent to destroy a base of the bugs. The base is built unde ...

  6. hdu 1011 Starship Troopers 树形背包dp

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

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

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

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

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

  9. [HDU 1011] Starship Troopers

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

随机推荐

  1. ACM Changchun 2015 L . House Building

    Have you ever played the video game Minecraft? This game has been one of the world's most popular ga ...

  2. C指针问题

    <!DOCTYPE html> 多级c指针传值问题 /* GitHub stylesheet for MarkdownPad (http://markdownpad.com) / / Au ...

  3. 从Windows想Linux上传文件 Linux(CentOS) 上安装vsftpd

    今天想在Linux上搭建个LAMP环境,以前用的Linux都安装了图形界面,但是这次用的阿里云服务器是纯命令模式,用起来有点不大适应. 最大的不适应就是获取apache等软件了,以前直接登录相应网站, ...

  4. Maven项目下Tomcat插件选择方法

    1. 进入Tomcat官网:http://tomcat.apache.org/ 选择Maven plugin 2. 选择版本 3. 查看版本对应的插件版本: 有两种方式添加:如下图所示:

  5. python基础补漏-09-反射

    isinstance class A: passclass B(A): pass b = B()print isinatance(b,A)issubclass 判断某一个类是不是另外一个类的派生类 # ...

  6. cobbler 安装centos7.3时GPT问题(五)

    磁盘分区表MBR和GPT介绍: MBR(Master Boot Record):最大只支持2 TB的盘,最多只支持4个主分区,信息只存储在一个区域. GPT(GUID partition table) ...

  7. Django 中CSRF中间件 'django.middleware.csrf.CsrfViewMiddleware',

    1.Django中CSRF中间件的工作原理及form表单提交需要添加{% csrf_token %}防止出现403错误 CSRF # 表示django全局发送post请求均需要字符串验证功能:防止跨站 ...

  8. 2017ICPC北京 J:Pangu and Stones

    #1636 : Pangu and Stones 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Chinese mythology, Pangu is the fi ...

  9. Nginx+PHPSTORM+Xdebug 配置

    1. php Xdebug扩展 下载  https://xdebug.org/download.php 选择自己的版本下载,会得到一个dll文件 例如 php_xdebug-2.7.0alpha1-7 ...

  10. iOS-----5分钟学会枚举的正确使用姿势-Enumeration宏

    前言 Enum,枚举,相信大部分编程语言都有对应的枚举类型,功能可能有多有少,但是枚举最核心的功能是 “规范的定义代码中的状态.状态码.选项”. 状态.状态码.选项 什么是状态:同时只能出现一个值(状 ...