题目
对于一棵二叉树,独立集是指两两互不相邻的节点构成的集合。例如,图1有5个不同的独立集(1个双点集合、3个单点集合、1个空集),图2有14个不同的独立集。那么,图3有___个不同的独立集。
方法
用树形dp的思想,分解问题,考虑一个点选择与不选两种情况,用f(表示选择该节点),g(表示不选该节点)两数组来记录
故(括号内为树的大小):
f(2)=1;
g(2)=2;
f(1)=1;
g(1)=1;
且可得以下两个状态转移方程
1.f(n)=g(左子树的大小)*g(右子树的大小)
一个点选了后左子树节点与右子树节点都不能选
2.g(n)=(g(左子树的大小)+f(左子树的大小))*(g(右子树的大小)+f(右子树的大小))
一个点若不选,则它左右两子节点可以选,也可以不选
具体计算过程
ans=f(17)+g(17)=1936+3600=5536
f(17)=g(8) * g(8)=1936
g(8)=(f(1)+g(1)) * (f(6)+g(6))=2 * (f(6)+g(6))=2 * (6+g(6))=44
f(6)=g(1) * g(4)=g(4)=6
g(4)=(f(1)+g(1)) * (f(2)+g(2))=2 * (f(2)+g(2))=6
g(6)=(f(1)+g(1)) * (f(4)+g(4))=2 * (f(4)+6)=16
f(4)=g(1) * g(2)=2
g(17)=(f(8)+g(8)) * (f(8)+g(8))=(44+f(8))^2=3600
f(8)=g(1) * g(6)=16