今天开始做老师给的专辑,打开DP专辑 A题 Rebuilding Roads 直接不会了,发现是树形DP,百度了下了该题,看了老半天看不懂,想死的冲动都有了~~~~

最后百度了下,树形DP入门,找到了 poj 2342 Anniversary party   先入门一下~

题意:

某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚会的总活跃指数最大。

思路:

任何一个点的取舍可以看作一种决策,那么状态就是在某个点取的时候或者不取的时候,以他为根的子树能有的最大活跃总值。分别可以用f[i,1]和f[i,0]表示第i个人来和不来。

当i来的时候,dp[i][1] += dp[j][0];//j为i的下属

当i不来的时候,dp[i][0] +=max(dp[j][1],dp[j][0]);//j为i的下属

以下代码参考:http://hi.baidu.com/saintlleo/blog/item/0606b3feb7026ad3b48f3111.html

//AC CODE:

    1. #include<cmath>
    2. #include<algorithm>
    3. #include<vector>
    4. #include<cstdio>
    5. #include<cstdlib>
    6. #include<cstring>
    7. #include<string>
    8. using namespace std;
    9. #define maxn 6005
    10. int n;
    11. int dp[maxn][2],father[maxn];//dp[i][0]0表示不去,dp[i][1]1表示去了
    12. bool visited[maxn];
    13. void tree_dp(int node)
    14. {
    15. int i;
    16. visited[node] = 1;
    17. for(i=1; i<=n; i++)
    18. {
    19. if(!visited[i]&&father[i] == node)//i为下属
    20. {
    21. tree_dp(i);//递归调用孩子结点,从叶子结点开始dp
    22. //关键
    23. dp[node][1] += dp[i][0];//上司来,下属不来
    24. dp[node][0] +=max(dp[i][1],dp[i][0]);//上司不来,下属来、不来
    25. }
    26. }
    27. }
    28. int main()
    29. {
    30. int i;
    31. int f,c,root;
    32. while(scanf("%d",&n)!=EOF)
    33. {
    34. memset(dp,0,sizeof(dp));
    35. memset(father,0,sizeof(father));
    36. memset(visited,0,sizeof(visited));
    37. for(i=1; i<=n; i++)
    38. {
    39. scanf("%d",&dp[i][1]);
    40. }
    41. root = 0;//记录父结点
    42. bool beg = 1;
    43. while (scanf("%d %d",&c,&f),c||f)
    44. {
    45. father[c] = f;
    46. if( root == c || beg )
    47. {
    48. root = f;
    49. }
    50. }
    51. while(father[root])//查找父结点
    52. root=father[root];
    53. tree_dp(root);
    54. int imax=max(dp[root][0],dp[root][1]);
    55. printf("%d\n",imax);
    56. }
    57. return 0;
    58. }

DP Intro - poj 2342 Anniversary party的更多相关文章

  1. DP Intro - Tree POJ2342 Anniversary party

    POJ 2342 Anniversary party (树形dp 入门题) Anniversary party Time Limit: 1000MS   Memory Limit: 65536K To ...

  2. POJ 2342 Anniversary party / HDU 1520 Anniversary party / URAL 1039 Anniversary party(树型动态规划)

    POJ 2342 Anniversary party / HDU 1520 Anniversary party / URAL 1039 Anniversary party(树型动态规划) Descri ...

  3. POJ 2342 - Anniversary party - [树形DP]

    题目链接:http://poj.org/problem?id=2342 Description There is going to be a party to celebrate the 80-th ...

  4. POJ 2342 Anniversary party (树dp)

    题目链接:http://poj.org/problem?id=2342 有n个人,每个人有活跃值.下面n-1行u和v表示u的上司是v,有直接上司和下属的关系不能同时参加party,问你party最大的 ...

  5. poj 2342 Anniversary party 树形DP入门

    题目链接:http://poj.org/problem?id=2342 题意:一家公司有1 <= N <= 6 000个职工,现要组织一些职工参加晚会,要求每个职工和其顶头上司不能同时参加 ...

  6. POJ 2342 Anniversary party 树形DP基础题

    题目链接:http://poj.org/problem?id=2342 题目大意:在一个公司中,每个职员有一个快乐值ai,现在要开一个party,邀请了一个员工就不可能邀请其直属上司,同理邀请了一个人 ...

  7. POJ 2342 Anniversary party(树形dp)

    Anniversary party Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7230   Accepted: 4162 ...

  8. poj 2342 Anniversary party 简单树形dp

    Anniversary party Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3862   Accepted: 2171 ...

  9. [ACM] POJ 2342 Anniversary party (树DP获得冠军)

    Anniversary party Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4410   Accepted: 2496 ...

随机推荐

  1. overflow 在ie7下失效

    问题原因: 当父元素的后代元素的样式拥有position:relative属性时,父元素的overflow:hidden属性就会失效. 解决方法: 在父元素中使用position:relative;即 ...

  2. 使用word文档直接发表博客 8 )

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  3. Logback configuration

    官方指导 http://logback.qos.ch/manual/configuration.html 规则 ch.qos.logback.core.joran.JoranConfiguratorB ...

  4. Spring实战-README.md

    教程 <Spring实战>(第四版),[美]Craig Walls著,张卫滨译 人民邮电出版社,2016.4 本系列博文包括: 第01章-Spring之旅 第02章-装配Bean 第03章 ...

  5. ACM 韩信点兵 、n的另一种阶乘、6174的问题

    3.6174问题 描述 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作.例如,从1234出发,依次可以得到4321- ...

  6. pom.xml导入项目的时候,出错

  7. 底部导航栏使用BottomNavigationBar

    1.github地址 https://github.com/zhouxu88/BottomNavigationBar 2.基本使用 2,1添加依赖 implementation 'com.ashokv ...

  8. C#高级特性:动态绑定

    C#高级特性:动态绑定 动态绑定 动态绑定将类型绑定(类型解析.成员和操作过程)从编译时推迟到了运行时.在编译时,如果程序员知道某个特定函数.成员的存在而编译器不知道,那么这种操作是非常有用的,这种情 ...

  9. Redis 工具类

    项目里的Redis 工具类,写下来以备后用 public class RedisConnector { public class RedisParseResult<T> { public ...

  10. Spring Boot - 依赖注入

    @Autowired 查找被注解的变量类型,找到所有此类型的构建或此类型子类的构建 如果一个也没有找到,看required参数,false则用null,true则失败(默认,即spring会启动失败) ...