您可以通过使用动态编程算法将信息从底层节点向上传播,从而在线性时间内解决此问题。
这样想:如果图只有一层,那么最佳答案必须是从该层中获取最大的值。另一方面,假设该图有 n + 1 层,并假设您已经(递归地)计算了最底部 n 层的最佳解决方案。在这种情况下,您可以通过查看顶层并计算每个条目的总和加上其任何直接子项的最佳解决方案(您已经预先计算)来找到整体最佳解决方案。所有这些中的最大值为您提供整体最大值。
这种方法最终只会访问每条边一次,因此总运行时间最终为 O(n + m),其中 n 是节点数,m 是边数。
希望这可以帮助!