如何确定访问有根树的 k 个叶节点的最小步骤?

How do I determine minimum steps to visit k leave node of a rooted tree?

算法即将访问 k 个离开节点并return返回根节点以最少的步骤!!

认为这是一个人站在第 2 点,he/she 想以最少的步数访问树的 k 个叶子,然后回到第 2 点。

对于 k=3 路径可以像

2-> "3" ->2->1-> "0" ->1-> "5" ->1->2 (这里3,0,5是叶子) 所以我们参观了 3 个级别..

答案:8

这是有根树上的另一个 bottom-up 动态程序。

对于每个子树,我们计算访问至少 j 个叶子 j in 0…k 的成本作为列表。如果子树是单片叶子,那么这个列表就是[0, 0, ∞, ∞, …, ∞],其中表示无穷大,代表一个不可行的叶子数量。否则,我们为每个 child 计算列表,将每个列表中除第一个之外的所有条目增加 2,然后通过卷积减少。对两个列表 AB 进行卷积就是计算 [min {A[i] + B[j-i]: i in 0…j}: j in 0…k]。 Return 根的 k 条目。

这是O(n k^2)时间。