解析
对每个输入的数据搜索,返回最小值。
回溯的核心是他一次可以复习两道题,就是把所有的数左右排列,就是左右脑的复习时间,如2 4 3,当一边为5 一边为4,差值最小,耗的时间最小,l , r 就是用于模拟这种情况。但由于要复习所有题,所以res = min( res, max( l, r))
然后就是l, r不能比res大,剪枝,然后就是基本回溯。
AC代码
a = list(map(int, input().split()))
ans = 0
A = []
def dfs(k, s):
global res, l, r
if r >= res or l >= res: return
if s == length:
res = min(res, max(l, r))
return
l += A[k][s]
dfs(k, s + 1)
l -= A[k][s]
r += A[k][s]
dfs(k, s + 1)
r -= A[k][s]
for i in range(4):
A.append(list(map(int, input().split())))
res = float('inf')
length = a[i]
l, r = 0, 0
dfs(i, 0)
ans += res
print(ans)