题目来源:http://www.51nod.com/Challenge/Problem.html#!#problemId=1007html
思路:要求两组之差最小的分组方法,必然有其中一组的和最接近但小于sum/2,这样就能够转化为0/1背包问题求解:价值和重量都是a[i]的大小。app
AC代码:spa
def solve(a): s = sum(a) dp = [0 for i in range(s)] for i in range(a.__len__()): for j in range(s // 2, a[i] - 1, - 1): dp[j] = max(dp[j - a[i]] + a[i], dp[j]) return abs(s - dp[s // 2] - dp[s // 2]) if __name__ == '__main__': n = int(input()) a = [] for i in range(n): a.append(int(input())) print(solve(a))