題目來源: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))