背包、树的直径、集合划分
实质都在于找到相应的递推关系。
对于n种物体k1-kn,大小为K的背包问题来说,递推关系是:P(n, K) = P(n-1, K) || P(n-1, K-kn),也即,根据当前物体kn是不是被选中,来二分。
对于树的直径问题,记f(t)为以节点t为根的子树的直径,h(t)为以节点t为根的子树的高度,则
f(t) = max{ f(left), f(right), h(left) + h(right) + 2 }
对于叶子节点,f与h均为0,则递归关系找到了。
对于集合的划分问题(一个整数集合,是否存在一种划分,使得两个子集合中元素的和相等),立刻可以转化为背包问题。