「HDU-1520」Anniversary party
树形DP,树的最大独立集问题
题意
给一颗n个结点的无根树,选出一系列结点,使得在任何两个结点均不相邻的情况下,结点的权值和最大。
解法
树的最大独立集问题。
用$d(i)$表示以$i$为根节点的子树的最大独立集大小。对于结点$i$只有两种决策:选和不选。如果不选$i$,则问题转化成了求出$i$的所有儿子的$d$值再相加;如果选$i$,则它的儿子全部不能选,问题转化为了求出$i$的所有孙子的$d$之和。
状态转移方程为:
$$d(i)=max{\sum_{j∈s(i)}d(j),\sum_{j∈gs(i)}d(j)+val(i)}$$
其中$gs(i)$与$s(i)$分别为$i$的孙子集合与儿子集合。
实现方法:当计算出一个$d(i)$后,用它去更新$i$的父节点和祖父节点。
代码
1 |
|