`
king_tt
  • 浏览: 2248156 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

poj 1947 Rebuilding Roads (树形背包dp)

 
阅读更多




本文出自 http://blog.csdn.net/shuangde800



题目链接: poj-1947


题意

给一棵树,问最少删掉几条边.使得剩下的子树中有节点个数为p个的

思路

几天前就看了这题,但是没什么想法,之后每天都有去想一下, 直到今天, 在我对自己方法还有怀疑
的情况下,竟然AC了..

f(i, j) 表示子树i,保留j个节点的最少删边次数, 注意,这里保留的j个节点的子树,是指根节点
为i的且有j个节点的子树.这样理解的话, 状态转移就容易想多了.

对于子树i, 如果只保留1个节点,那么连接它所有儿子节点的边都要删掉,
所以可以初始化 f(i, 1) = 节点i的儿子个数

f(i, j), 即子树i保留j个节点, 那么对于i的每个子树,可以选择保留1,2,..j-1个节点
那么每个子树可以看作是一组物品,对所有子树做分组背包

子树v选择保留k个点的话,那么子树i就要保留j-k个点.

所以由状态转移:
f(i, j) = max{ max{f(i,j-k) + f(v, k) - 1 | 1<=k<s} | v是i的儿子节点 }

最终ans = min{ f(i, p) | 1<=i<=n }



代码

<script src="https://code.csdn.net/snippets/663.js" type="text/javascript"></script>

分享到:
评论

相关推荐

    POJ1724-ROADS

    标题“POJ1724-ROADS”指的是北京大学在线编程平台POJ上的一道题目,编号为1724,题目内容与道路建设或规划有关。解题报告和AC(Accepted)代码是该问题已经成功解决的证明,通常包括对问题的理解、算法设计、代码...

    POJ1724-ROADS 测试数据

    标题中的"POJ1724-ROADS"是一个经典的编程竞赛题目,源自1998年CEOI(国际信息学奥林匹克竞赛)的第二轮。这个题目在编程竞赛圈子内广为流传,常被用于训练参赛者的算法和数据结构技能。POJ(Programming Online ...

    poj 2749 Building roads.md

    poj 2749 Building roads.md

    POJ3411-Paid Roads【class】

    标题中的"POJ3411-Paid Roads【class】"指的是一个编程竞赛问题,源自北京大学的在线评测系统POJ(Problem Online Judge)。这个题目可能涉及到道路付费的问题,需要通过编程来解决。"class"在这里可能指的是在解决...

    概率dp 树形dp经典题目加解析

    在概率动态规划(概率DP)和树形动态规划(树形DP)中,我们常常会遇到求概率和求期望的问题。概率DP一般用于正向推算概率问题,而期望通常需要我们从结果逆向推算过程中的期望值。 首先来看概率DP在矩阵优化的应用...

    poj dp总结,动态规划分类

    ### poj dp总结:动态规划分类 #### 概述 动态规划(Dynamic Programming,简称DP)是一种在计算机科学和数学中广泛使用的算法策略,用于解决最优化问题。它通过将复杂问题分解为较简单的子问题来求解,并利用这些...

    poj2342AC代码

    poj2342,树形dp,dp[i][0]表示i不参加party,其下属(包括非直接下属)能得到的最优值。dp[i][1]表示i参加的其下属和他能得到的最优值。

    poj1251 最小生成树

    标题“poj1251 最小生成树”是一个编程竞赛题目,来源于著名的在线编程平台POJ(Programming Online Judge)。这个题目主要涉及图论中的一个经典算法问题——最小生成树(Minimum Spanning Tree, MST)。在图论中,...

    POJ1014-Dividing【DFS】【多重背包+二进制优化】

    在给出的文件列表中,“POJ1014-Dividing【多重背包+二进制优化】.cpp”和“POJ1014-Dividing【DFS】.cpp”很可能是两份不同的C++代码实现,分别展示了如何结合多重背包和二进制优化以及如何利用DFS来解决问题。...

    poj 3342(树状dp)

    ### Poj 3342 (树状DP) #### 题目背景 这是一道典型的树状动态规划问题,来源于POJ平台编号为3342的题目。题目描述了一个公司的组织结构,并提出了一种特定场景下的最优解求法。 #### 题目解析 在题目描述中提到...

    poj 1191 经典dp 源代码

    根据标题“poj 1191 经典dp 源代码”和描述中的信息,可以推测此题目是一个经典的动态规划问题。题目要求通过划分一个二维矩阵为多个不重叠的矩形区域,使得每个矩形区域的平均值与整体平均值之差的平方和最小。这个...

    ACMer需要掌握的算法讲解 (2).docx

    * 树型动态规划:POJ2057、POJ1947、POJ2486、POJ3140 五、计算几何学 * 坐标离散化:POJ3429 * 代码快速写成,精简但不失风格:POJ2525、POJ1684、POJ1421、POJ1048、POJ2050、POJ3306 * 保证正确性和高效性:POJ...

    POJ算法题目分类

    * 型如下表的简单 DP:型如下表的简单 DP 是指解决问题的简单 DP 算法,如 poj3267、poj1836、poj1260、poj2533。 * 计算几何学:计算几何学是指解决问题的计算几何学算法,如 poj2031、poj1039。 六、数学 数学...

    POJ1015-Jury Compromise【动态规划DP】

    【标题】"POJ1015-Jury Compromise" 是一个编程竞赛题目,主要涉及的是动态规划(Dynamic Programming, 简称DP)的算法应用。动态规划是一种解决复杂问题的有效方法,它通过将问题分解成子问题,并存储子问题的解来...

    树形动态规划详细讲解

    树形动态规划(Tree Dynamic Programming,简称树形DP)是在树形结构上的动态规划。其核心在于通过子节点的信息来推导父节点的状态。在很多情况下,我们可以通过从叶子节点到根节点的方向进行状态传递,从而找到最优...

    poj题目分类

    * 类型 DP:例如 poj3267、poj1836、poj1260、poj2533。 中级 1. 基本算法: * C++的标准模版库的应用:例如 poj3096、poj3007。 * 较为复杂的模拟题的训练:例如 poj3393、poj1472、poj3371、poj1027、poj2706...

    POJ 1015 动态规划

    POJ上的一道题目,自己写的代码,因为想下载别人的, 所以就放上了。

    POJ 1751 求最小生成树prim算法(JAVA)

    最小生成树是一棵树形结构,包含了原图的所有顶点,并且其所有边的权重之和最小。 Prim算法的基本思想是从一个起始顶点开始,逐步将与已选顶点集合连接的、具有最小权重的边加入到生成树中,直到所有顶点都被包含。...

    ACM-POJ 算法训练指南

    3. **多维动态规划**:处理多个维度的状态(poj2057, poj1947, poj2486, poj3140)。 ### 十五、进阶数学 1. **数列和级数**:数列求和、级数收敛性分析(poj1286, poj2409, poj3270, poj1026)。 2. **数学归纳法...

Global site tag (gtag.js) - Google Analytics