最近在做算法题时,碰到这样一道算法题:给你N个整数,把它们分成两堆,怎么
分?才能使|SA-SB|的值最小,且最小值是多少?下面就基于python实现一下该算法。
#!/usr/local/bin/python
# # -*- coding: utf-8 -*-
import numpy as np
class DivideTOAB():
def __init__(self,inputlist):
self.inputlist = inputlist
self.listA=[]#用来存储放入A中的数字
self.num = len(self.inputlist)#长度
self.maxsum = sum(self.inputlist)/2#表示每个集合最大的和
def min(self):
self.inputlist.sort()#对输入的list进行排序
matPacket = np.zeros((self.num,self.maxsum+1))#创建一个用以迭代更新的矩阵
'''matPacket[i][j]表示在前i个物体中,能够装入容量为j背包的最大价值量'''
for i in range(1,self.num):#不断的更新容量为j的背包中最大的值
for j in range(1,self.maxsum+1):
matPacke