我得到两个数组,一个定义节点的关系,另一个定义节点的值。
arr1={0,1,1,1,3,3,4}
arr2={22,100,3,3,4,5,9}
arr1定义了关系,即根节点是第1个元素,节点2,3的父节点,第4个是节点1,节点5和6的父节点是根节点3,节点7节节点的父节点是节点4。
arr2给出节点的值,节点1的值为22,节点2的值为100.
我必须找到节点的最大总和,这样就不会有两个包含节点的父节点或父节点关系。
示例输入:
a[i]=[0,1,1,1,3,3,6,6]
b[i]=[1,2,3,4,5,100,7,8]
output: 111
我是DS和ALGO的新手,甚至无法想到解决方案。需要帮助谢谢。 任何类型的帮助都可以。
答案 0 :(得分:1)
您可以使用Dynamic Programming
解决此问题。
考虑一个数组dp[]
,它存储每个顶点及其子树的答案。
现在DP
的状态为,
dp[currentVertex] = max(sum of all children's dp[] ,
b[currentVertex] + sum of all vertices' dp[] whose
greatGrandParent is currentVertex])
您需要使用自下而上的方法构建DP
表。所以从树叶开始。
在完成所有计算后,答案为dp[root]
。