zoukankan      html  css  js  c++  java
  • 集训Day 8 2020.3.8 动态规划(三)

    集训Day 8 2020.3.8

    动态规划(三)

    1.P1352 没有上司的舞会

    某大学有(N)个职员,编号为(1)~(N)。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的 直接上司。现在有个周年庆宴会,宴会每 邀请来一个职员都会增加一定的快乐指数(R_i),但是呢,如果某个职员的直接上司来参加 舞会了,那么这个职员就无论如何也不肯 来参加舞会了。所以,请你编程计算,邀 请哪些职员可以使快乐指数最大,求最大 的快乐指数。

    题解

    这大概才是经典树形dp吧……
    f[x][0/1]表示以x为根的子树,且x不参加/参加 舞会的最大快乐值

    f[x][0]=sigma{max(f[y][0],f[y][1])} (y是x的儿子)
    f[x][1]=sigma{f[y][0]}+happy[x] (y是x的儿子)
    

    先找到唯一的树根root
    ( ext{ans}=max(f_{root,0},f_{root,1}))

    2.P2016 战略游戏

    现在要在一棵树上布置士兵,每个士兵在 结点上,每个士兵可以守护其结点直接相 连的全部边,问最少需要布置多少个士兵。

    题解

    dp[i][0]表示这个点不选(那么子结点就必 须全部都要选了),故+儿子选
    dp[i][1]表示这个点选,那么子结点就是 +min(儿子选/不选)
    答案是min(dp[root][0],do[root][1]);

    3.POJ2378

    给一颗树,问删除哪些结点可以使得剩下的每个子图的结点数(le)总数/2。

    题解

    显然一个节点的所有儿子的子树都(le)总数/2并且n-它子树节点(le)总数/2
    那么这个点就是一个合法的点。
    那么size[i]就可以表示i节点的子树节点个数, 通常我们称之为子树大小(所以这题根本不是dp啊)

    4.ZOJ-3201

    给一棵树,有点权,问这棵树大小为k的子 树最大的权值和是多少

    题解

    设dp[i][j]表示i点大小为j的子树的最大权值 和,则

    dp[u][j] = max(dp[u][j], dp[u][k] + dp[v][j - k])
    

    复杂度(O(kn^2)),但它并不是最优复杂度。
    稍后我们会进一步优化。

    5.POJ-3659

    (nin [1,10000])个点,(n-1)条边,树形结构, 从n个点中取尽量少的点构成一个集合,使 剩下所有点都能与这个集合中的部分点相 连。

    题解

    和士兵那道题是不是很相似?
    但是这道题dp还需要多考虑父亲的儿子的影响
    dp[i][0]表示i结点不布置士兵,i的父亲要去 覆盖i。
    dp[i][1]表示i结点不布置士兵,但是其子结点存在布置了士兵的结点(故i已经被覆盖)
    dp[i][2]表示i结点布置士兵

    是不是dp[u][1]比较难处理?

    并且至少要选一个dp[v][2],如果选了那自然是最好的。
    否则dp[u][1]+=min(dp[v][2]-dp[v][1])

    作业

    1.HDU-2196

    给一棵树,有n个结点,结点之间的边有权 值,问每个结点的最远结点距离其多远。
    提示:
    https://blog.csdn.net/u011426016/article/d etails/89164896

    2.P1077 摆花

    P1352,P2016,2378@POJ,3201@ZOJ,3659@POJ,2196@HDU,P1077

    要做就做南波万
  • 相关阅读:
    多维数组和元组
    字符串
    列表
    JQuery事件的绑定
    JQuery设置缓慢下拉大行多次执行的解决办法,以及stop()函数的简单理解
    JQuery_AJAX简单笔记
    C#后台验证身份证号码的一个方法
    JQuery AJAX请求aspx后台方法
    网络编辑器插件ckeditor+ckfinder配置
    请编程实现:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复(百度了一下,get一种高性能算法,非递归)
  • 原文地址:https://www.cnblogs.com/liuziwen0224/p/xjx8.html
Copyright © 2011-2022 走看看