题目有点问题, 没说明是有向图。
n = int(input())
nums = list(map(int, input().split()))
# 构建图
edge = [[0] * n for _ in range(n)]
for i in range(n - 1):
temp = list(map(int, input().split()))
for j in range(i + 1, n):
edge[i][j] = temp[j - 1 - i]
res = n - 1
dp = [0] * n
path = [[] for _ in range(n)]
for i in range(n - 1, -1, -1):
path[i].append(i + 1)
temp = []
for j in range(i + 1, n):
if edge[i][j] and dp[i] < dp[j]:
dp[i] = dp[j]
temp = path[j]
path[i].extend(temp)
dp[i] += nums[i]
if dp[i] > dp[res]: res = i
print(' '.join(map(str, path[res])))
print(dp[res])