正整數分組【動態規劃】

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

參考:http://www.javashuo.com/article/p-sysmeddh-cp.htmlcode

   http://www.javashuo.com/article/p-sysmeddh-cp.htmlhtm

相關文章
相關標籤/搜索