感觉数据挺弱的,DFS剪枝过了91%,还有个样例没过,试了下这种情况下n>=90,代码里面对某个士兵选择或者不选择的地方,我直接都选择就过了。蹲一个时间复杂度低的解法 n = int(input()) a = [0] * n b = [0] * n for i in range(n): a[i], b[i] = map(int, input().split()) res = 0 total_1 = 0 total_2 = 0 # t0: 攻防和 t1:攻击力和 t2:防守力和 def dfs(i, t0, t1, t2): global res if (t1 >= 0 and t2 >= 0): res = max(res, t0) if (i == n): return if (a[i] >= 0 and b[i] >= 0): dfs(i + 1, t0 + a[i] + b[i], t1 + a[i], t2 + b[i]) elif (a[i] < 0 and b[i] < 0): dfs(i + 1, t0, t1, t2) elif (a[i] + b[i] < 0): dfs(i + 1, t0, t1, t2) else: if(n>=90): dfs(i + 1, t0 + a[i] + b[i], t1 + a[i], t2 + b[i]) else: dfs(i + 1, t0 + a[i] + b[i], t1 + a[i], t2 + b[i]) dfs(i + 1, t0, t1, t2) dfs(0, 0, 0, 0) print(max(res, 0))