多重背包问题(悲剧解法)
·
多重背包:输入 n, m, m是背包容量,n是物品种类, p存储物品价值, w存放物品重量, c存放每种的数量, 同种物品各个属性索引相同
方法:
笨办法:将同种物品集合做不同类来处理,于是将同种类的集合也拆分为01背包问题求解
#!/usr/bin/python
m = int(raw_input("get m as the max bag size:"))
n = int(raw_input("get n as the goods tots:"))
print("bag max store: %d, goods tots: %d" % (m, n))
table = [0]*(m+1)
p = [0]
w = [0]
c = [0]
for i in range(1, n+1):
weigth = int(raw_input("get weigth:"))
value = int(raw_input("get val:"))
nums = int(raw_input("get nums:"))
w.append(weigth)
p.append(value)
c.append(nums)
print p
print w
print c
#print table
for row in range(1, n+1):
for count in range(1, c[n]+1):
for col in range(m, 0, -1):
if(w[row] <= col and table[col - w[row]] + p[row] > table[col]):
table[col] = table[col - w[row]] + p[row]
print table
print "max value can store:" + str(table[m])
更多推荐



所有评论(0)