算法-多叉树-组织party最大快乐值
package com.jiucaiyuan.net.algrithm.tree; import java.util.List; /** * <pre> * 树形dp套路 * 树形dp套路使用前提: * 如果题目求解目标是S规则,则求解流程可以定成每一个节点为头节点的子树 * 在S规则下的每个答案,并且最终答案一定在其中 * 案例题 * 【题目】派对的最大快乐值 * 员工信息定义如下 * class Employee{ * public int happy; //这名员工带来的快乐值 * List<Employee> subordinates; //这名员工有哪些直接下级 * } * 公司每名员工都符合Employee类的描述,整个公司的人员结构可以看做是 * 标准的、没有环的多叉树,树的头结点可以看做是公司唯一的老板,除了老板 * 外,每个员工都有唯一的上级。叶子结点是没有直接下级的基层员工(subordinates * 列表为null),除了基层员工外,每个员工都有一个或多个直接下级。 * 这个公司要办party,你可以决定哪些员工来,哪些员工不来,但是要遵循 * 如下规则: * 1.如果某个员工来了,那么这个员工的直接下级都不能来; * 2.派对的整体快乐值是到场的所有员工快乐值的累加; * 3.你的目标是让派对的整体快乐值最大; * 给定一个多叉树的头结点boss,请返回派对的最大快乐值 * 【思路】 * 划分为几种情况: * 1.头结点参与,最大快乐值=直属员工不参与的情况下最大快乐值的累加和; * 2.头结点不参与,轮训所有直属员工,直属员工来的情况下最大快乐值的累加和+直属员工不来的情况下最大快乐累加值; * 从两种中累加,就是整party最大的快乐值 * 子树返回的结果:头结点来时的最大快乐值,头结点不来时的最大快乐值 * </pre> * * @Author jiucaiyuan 2022/5/6 23:06 * @mail services@jiucaiyuan.net */ public class MaxHappyValue { public static class Employee { public int happy; public List<Employee> subordinates; } public static class Info { public int yesMaxHappy; //来的时候最大快乐值 public int noMaxHappy; //不来时最大快乐值 public Info(int yes, int no) { this.yesMaxHappy = yes; this.noMaxHappy = no; } } /** * 取得以boss为老板的公司组织party获得的最大快乐值 * * @param boss 整个公司唯一的老板 * @return 最大快乐值 */ public static int maxHappy(Employee boss) { Info info = process(boss); return Math.max(info.yesMaxHappy, info.noMaxHappy); } /** * @param employee 当前员工来与不来获得的最大快乐值 * @return */ private static Info process(Employee employee) { if (employee == null) { return new Info(employee.happy, 0); } //当前员工来,再统计直属下级不来时最大快乐值累加 int yes = employee.happy; //当前员工不来,再统计直属下级来与不来时最大快乐值累加 int no = 0; for (Employee e : employee.subordinates) { Info eInfo = process(e); //当前员工来,直接下属不来时的快乐值 yes += eInfo.noMaxHappy; //当前员工不来,下属可以来也可以不来,得到最大快乐值 no += Math.max(eInfo.yesMaxHappy, eInfo.noMaxHappy); } return new Info(yes, no); } }
日历
个人资料
diaba 寻求合作请留言或联系mail: services@jiucaiyuan.net
链接
最新文章
存档
- 2024年10月(1)
- 2024年8月(2)
- 2024年6月(4)
- 2024年5月(1)
- 2023年7月(1)
- 2022年10月(1)
- 2022年8月(1)
- 2022年6月(11)
- 2022年5月(6)
- 2022年4月(33)
- 2022年3月(26)
- 2021年3月(1)
- 2020年9月(2)
- 2018年8月(1)
- 2018年3月(1)
- 2017年3月(3)
- 2017年2月(6)
- 2016年12月(3)
- 2016年11月(2)
- 2016年10月(1)
- 2016年9月(3)
- 2016年8月(4)
- 2016年7月(3)
- 2016年6月(4)
- 2016年5月(7)
- 2016年4月(9)
- 2016年3月(4)
- 2016年2月(5)
- 2016年1月(17)
- 2015年12月(15)
- 2015年11月(12)
- 2015年10月(6)
- 2015年9月(11)
- 2015年8月(8)
分类
热门文章
- SpringMVC:Null ModelAndView returned to DispatcherServlet with name 'applicationContext': assuming HandlerAdapter completed request handling
- Mac-删除卸载GlobalProtect
- java.lang.SecurityException: JCE cannot authenticate the provider BC
- MyBatis-Improper inline parameter map format. Should be: #{propName,attr1=val1,attr2=val2}
- Idea之支持lombok编译
标签
最新评论
- logisqykyk
Javassist分析、编辑和创建jav... - xxedgtb
Redis—常见参数配置 - 韭菜园 ... - wdgpjxydo
SpringMVC:Null Model... - rllzzwocp
Mysql存储引擎MyISAM和Inno... - dpkgmbfjh
SpringMVC:Null Model... - tzklbzpj
SpringMVC:Null Model... - bqwrhszmo
MyBatis-Improper inl... - 乐谱吧
good非常好 - diaba
@diaba:应该说是“时间的度量依据”... - diaba
如果速度增加接近光速、等于光速、甚至大于...
最新微语
- 从今天起,做一个幸福的人。喂马,砍柴,(思想)周游世界
2022-03-21 23:31
- 2022.03.02 23:37:59
2022-03-02 23:38
- 几近崩溃后,找到解决方法,总是那么豁然开朗!所以遇到问题要坚持!
2018-07-18 10:49
- 2018年关键字“走心”
2018-03-19 16:07
- 保护好自己最大的方法是让自己更强大,不要柔弱的像一只绵羊一样,得谁巴拉,就谁巴拉!
2017-12-20 10:24
发表评论: