蒟蒻dp没有解出来,这道题python的题解也很少很少,所以写了py 的dfs 的解法
灰常详细(doge)
话不多数,直接上代码
n = int(input())
value_arr = list(map(int,input().split(" "))) #所挖宝藏的价值
graph_arr = []
for i in range(n-1):
graph_arr.append(list(map(int,input().split(" ")))) #建立图
graph_arr.append([0])
def dfs(node,road="", res = 0,): #每一个节点(node)我们定义两个指标,road 为所走过的路径, res为该路径下的所能挖到宝藏的和
res+= value_arr[node-1] #每一次递归都要去对 res 和 road 进行一次更新
road+=str(node)+" "
for i in range(len(graph_arr[node-1])): #对每一次父节点所能到达下一个子节点进行dfs
if graph_arr[node-1][i] == 1:
dfs(node+i+1,road,res)
elif graph_arr[node-1][i] == 0: #如果无路可走,则代表当前路径已经探索完,goal列表记录[res,road]
goal.append([res,list(road)]) # 为了方便输出,我们直接list,用字符串拼接的方式是为了更好地记录路径
goal = []
for i in range(n):
dfs(i+1,"",0)
maxum = 0
point = 0
for i in range(len(goal)):
if goal[i][0] > maxum: #找到最大值得储存的信息
maxum = goal[i][0]
point = i
for j in goal[point][1]:
print(j,end="") #输出
print("\r")
print(maxum)版权声明:本文为weixin_64355018原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。