派对的最大快乐值

Posted laydown

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了派对的最大快乐值相关的知识,希望对你有一定的参考价值。


import java.util.ArrayList;
import java.util.List;

/**
* 派对的最大快乐值
* <p>
* 一棵多叉树代表员工的上下级关系,孩子节点是父节点的直接下级。
* 节点代表员工,属性包括快乐值和孩子节点列表。
* 大家参加了party,要求一个员工去了则它的所有直接下级都不能去,问参加party能得到的最大快乐值是多少。
*/
public class MaxHappy {

public static int maxHappy(Employee boss) {
if (boss == null) {
return 0;
}
ResultInfo all = process(boss);
return Math.max(all.yes, all.no);
}

public static ResultInfo process(Employee x) {
if (x.nexts.isEmpty()) {
return new ResultInfo(x.happy, 0);
}
int yes = x.happy;
int no = 0;
for (Employee next : x.nexts) {
ResultInfo nextInfo = process(next);
yes += nextInfo.no;
no += Math.max(nextInfo.yes, nextInfo.no);
}
return new ResultInfo(yes, no);
}

/**
* 返回的快乐值
*/
public static class ResultInfo {

// 参与的快乐值
public int yes;

// 不参与的快乐值
public int no;

public ResultInfo(int y, int n) {
yes = y;
no = n;
}

}

/**
* 员工
*/
public static class Employee {

// 快乐值
public int happy;

// 直接下级
public List<Employee> nexts;

public Employee(int h) {
happy = h;
nexts = new ArrayList<>();
}

}

}

/* 如有意见或建议,欢迎评论区留言;如发现代码有误,欢迎批评指正 */

以上是关于派对的最大快乐值的主要内容,如果未能解决你的问题,请参考以下文章

[程序员代码面试指南]二叉树问题-派对的最大快乐值

2017年浙江中医药大学大学生程序设计竞赛(重现赛)A - 不存在的树

没有上司的舞会 树形DP

AtCoder NIKKEI Programming Contest 2019 C. Different Strokes (贪心)

POJ 2342 Anniversary party 树形DP基础题

活动预告HAPI英语—梦境探险家