题目链接: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. 【js】input 焦点到内容的最后

     //引用部分应支持jQuery  function find_focus(obj){    var curr = jQuery(obj);    var val = curr.val();    c ...

  2. python 中 * 与**的使用

    1.参数中使用如果是函数定义中参数前的*表示的是将调用时的多个参数放入元组中,**则表示将调用函数时的关键字参数放入一个字典中 如定义以下函数 def func(*args): print(args) ...

  3. hdu3613 Best Reward

    先manacher.然后前缀和价值,枚举切点,O(1)判断切后是否回文 #include <iostream> #include <cstring> #include < ...

  4. luogu3370 【模板】字符串哈希

    #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> ...

  5. 一个通用的Makefile框架

    先做一个简单的记录,后续有时间再慢慢完善补充细节. 先上一个整体图片: 其中,最重要的文件就是:program_template.mk. 下面是program_template.mk最重要的内容: $ ...

  6. day01_03.人人都会编程

    PHP if语句打招呼编程 <?php$gender = "man"; if($gender == "man"){ echo "you are ...

  7. 国际化多语言(本地化)缩写 NLS API

    NLS Information for Windows 7 LCID Culture Identifier Culture Name Locale Language Country/Region La ...

  8. sgen.exe 未能运行

    指定的任务可执行文件“sgen.exe”未能运行.文件名或扩展名太长. 解决方式,右键项目属性->生成  把下图红框的“开”设置成“自动”

  9. Bash Command 1: find

    GNU find searches the directory tree rooted at each given starting-point by evaluating the given exp ...

  10. Educational Codeforces Round 10——B. z-sort

    B. z-sort time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...