n = int(input())
nums = list(map(int,input().split()))
dp = {}
def dfs(nodeIdx):
if nodeIdx>=n:return 0
if nodeIdx in dp: return dp[nodeIdx]
# 选择去除当前节点,则左孩子,右孩子不能去掉,只能去掉他们的孩子
l,r = 2*nodeIdx + 1,2*nodeIdx + 2
ll,lr = 2*l+1, 2*l+2
rl,rr = 2*r+1, 2*r+2
cost = nums[nodeIdx] + dfs(ll)+dfs(lr)+dfs(rl)+dfs(rr)
# 不去除当前节点,则左孩子,右孩子都能去掉
cost = max(cost, dfs(l)+dfs(r))
dp[nodeIdx] = cost
return cost
print(dfs(0))
6、网络升级改造
最新推荐文章于 2024-07-25 11:27:31 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)