[题目链接]

http://poj.org/problem?id=3345

[算法]

树形背包

[代码]

  1. #include <algorithm>
  2. #include <bitset>
  3. #include <cctype>
  4. #include <cerrno>
  5. #include <clocale>
  6. #include <cmath>
  7. #include <complex>
  8. #include <cstdio>
  9. #include <cstdlib>
  10. #include <cstring>
  11. #include <ctime>
  12. #include <deque>
  13. #include <exception>
  14. #include <fstream>
  15. #include <functional>
  16. #include <limits>
  17. #include <list>
  18. #include <map>
  19. #include <iomanip>
  20. #include <ios>
  21. #include <iosfwd>
  22. #include <iostream>
  23. #include <istream>
  24. #include <ostream>
  25. #include <queue>
  26. #include <set>
  27. #include <sstream>
  28. #include <stdexcept>
  29. #include <streambuf>
  30. #include <string>
  31. #include <utility>
  32. #include <vector>
  33. #include <cwchar>
  34. #include <cwctype>
  35. #include <stack>
  36. #include <limits.h>
  37. using namespace std;
  38. #define MAXN 210
  39. const int INF = 2e9;
  40.  
  41. int i,j,k,root,n,m,tot,u,v,x,ans;
  42. int size[MAXN],fa[MAXN],val[MAXN];
  43. int f[MAXN][MAXN];
  44. char s[MAXN];
  45. map< string,int > mp;
  46. vector< int > e[MAXN];
  47.  
  48. inline void dp(int u)
  49. {
  50. int i,j,k,v;
  51. f[u][] = ;
  52. size[u] = ;
  53. for (i = ; i < (int)e[u].size(); i++)
  54. {
  55. v = e[u][i];
  56. dp(v);
  57. size[u] += size[v];
  58. for (j = size[u]; j >= ; j--)
  59. {
  60. for (k = ; k <= size[v]; k++)
  61. {
  62. f[u][j] = min(f[u][j],f[u][j - k] + f[v][k]);
  63. }
  64. }
  65. }
  66. if (u != root) f[u][size[u]] = min(f[u][size[u]],val[u]);
  67. }
  68.  
  69. int main()
  70. {
  71.  
  72. while (scanf("%s",&s) != EOF && strcmp(s,"#") != )
  73. {
  74. scanf("%d",&m);
  75. n = ;
  76. for (i = ; s[i] != '\0'; i++) n = n * + s[i] - '';
  77. tot = ;
  78. mp.clear();
  79. memset(val,,sizeof(val));
  80. memset(fa,,sizeof(fa));
  81. for (i = ; i <= n; i++) e[i].clear();
  82. for (i = ; i <= n; i++)
  83. {
  84. scanf("%s%d",&s,&x);
  85. if (!mp[s]) mp[s] = ++tot;
  86. u = mp[s];
  87. val[u] = x;
  88. while (getchar() != '\n')
  89. {
  90. scanf("%s",&s);
  91. if (!mp[s]) mp[s] = ++tot;
  92. v = mp[s];
  93. e[u].push_back(v);
  94. fa[v] = u;
  95. }
  96. }
  97. root = ;
  98. for (i = ; i <= n; i++)
  99. {
  100. if (!fa[i])
  101. e[root].push_back(i);
  102. }
  103. memset(size,,sizeof(size));
  104. memset(f,0x3f,sizeof(f));
  105. dp(root);
  106. ans = INF;
  107. for (i = m; i <= n; i++) ans = min(ans,f[][i]);
  108. printf("%d\n",ans);
  109. }
  110.  
  111. return ;
  112.  
  113. }

[POJ 3345] Bribing FIPA的更多相关文章

  1. POJ 3345 Bribing FIPA 树形DP

    题目链接: POJ 3345 Bribing FIPA 题意: 一个国家要参加一个国际组织,  需要n个国家投票,  n个国家中有控制和被控制的关系, 形成了一颗树. 比如: 国家C被国家B控制, 国 ...

  2. poj 3345 Bribing FIPA (树形背包dp | 输入坑)

    题目链接:  poj-3345  hdu-2415 题意 有n个国家,你要获取m个国家的支持,获取第i个国家的支持就要给cost[i]的价钱    其中有一些国家是老大和小弟的关系,也就是说,如果你获 ...

  3. poj3345 Bribing FIPA【树形DP】【背包】

    Bribing FIPA Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5910   Accepted: 1850 Desc ...

  4. HDU 2415 Bribing FIPA

    Bribing FIPA Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original I ...

  5. Bribing FIPA

    Bribing FIPA 给出多棵有n个节点的有根树,第i个节点有一个权值\(a_i\),定义一个点能控制的点为其所有的子节点和它自己,询问选出若干个点的最少的权值之和,并且能够控制大于等于m个点,\ ...

  6. POJ3345 Bribing FIPA

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5021   Accepted: 1574 Description There ...

  7. POJ3345 Bribing FIPA 【背包类树形dp】

    题目链接 POJ 题解 背包树形dp板题 就是读入有点无聊,浪费了很多青春 #include<iostream> #include<cstdio> #include<cm ...

  8. poj 3345 树形DP 附属关系+输入输出(好题)

    题目连接:http://acm.hust.edu.cn/vjudge/problem/17665 参考资料:http://blog.csdn.net/woshi250hua/article/detai ...

  9. POJ3345 Bribing FIPA(树形DP)

    题意:有n个国家,贿赂它们都需要一定的代价,一个国家被贿赂了从属这个国家的国家也相当于被贿赂了,问贿赂至少k个国家的最少代价. 这些国家的从属关系形成一个森林,加个超级根连接,就是一棵树了,考虑用DP ...

随机推荐

  1. Linux通信之poll机制分析

    poll机制分析 韦东山 2009.12.10 所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数.比如系统调用open.read.write.poll,与之对应的 ...

  2. css下拉菜单写法

    网页导航栏的下拉效果,通过div框的显示和隐藏实现. <html> <head> <meta charset="UTF-8"> <titl ...

  3. AI:IPPR的数学表示-CNN方法

    前言: 随着超量类别PR和高精度的需求,人工特征方法局限性凸显出来,固定的特征hash压缩映射因其压缩损失.表现为特定的特征hash方法,在海量的同类数据集上近邻特性变差,而在不同类别的数据上面隔离性 ...

  4. 【sqli-labs】 less36 GET- Bypass MYSQL_real_escape_string (GET型绕过MYSQL_real_escape_string的注入)

    看一下mysql_real_escape_string()函数 \x00 \x1a 注入的关键还是在于闭合引号,同样使用宽字节注入 http://192.168.136.128/sqli-labs-m ...

  5. SQL 分组

  6. Django 路由视图FBV/CBV

    路由层  url路由层结构 from django.conf.urls import url from django.contrib import admin from app01 import vi ...

  7. [luogu4478 BJWC2018] 上学路线 (容斥原理+拓展lucas)

    传送门 Description 小B 所在的城市的道路构成了一个方形网格,它的西南角为(0,0),东北角为(N,M). 小B 家住在西南角,学校在东北角.现在有T 个路口进行施工,小B 不能通过这些路 ...

  8. 三剑客基础详解(grep、sed、awk)

    目录 三剑客基础详解 三剑客之grep详解 1.通配符 2.基础正则 3.grep 讲解 4.拓展正则 5.POSIX字符类 三剑客之sed讲解 1.sed的执行流程 2.语法格式 三剑客之Awk 1 ...

  9. Linux启用ftp服务及连接

    虚拟机的系统是centos6.3 第一步.启动ftp service vsftpd restart 提示 vsftpd: 未被识别的服务 解决方法是升级vsftpd服务 yum install vsf ...

  10. Q&A to prepare interview of HSBC

    1.How do you keep updating lastest IT knowledge? 1).keep an eye on current project technology evetho ...