问题描述:1、一个背包,往里装东西,物品重量w(weight)对应为[2,3,4,7] ,价值va(value)对应为[1,4,7,12] ,如果你的最大承重为20,每个物品可装次数不限,求你能装入背包的最大价值。
2、如果物品可装次数times对应为[4,3,2,1],求你能装入背包的最大价值。
3、如果物品体积vo(volume)对应为[3,5,8,17],最大容量为35,求你能装入背包的最大价值。
import pandas as pd
def Knapsack(w, vo, va, times, total_weight, total_volume):
total_value = 0
result = [{
'weight': 0,
'volume': 0,
'value': 0,
'total_value': total_value, #递增
'rest_weight': total_weight, #递减
'rest_volume':total_volume #递减
}]
y = [0] * len(w) #用以统计物品装入次数
for i in range(1000): #设置尝试装入次数
k = 0
for j in range(len(w)):
if w[k] > total_weight or vo[k] > total_volume or y[k] == times[k]: #去掉重量超过剩余承重或体积大于剩余容量或装入次数达到上限的物品
print("重量%d体积%d:共装入%d次" %(w[k], vo[k], y[k]))
del w[k], vo[k], va[k], times[k], y[k]
else:
k += 1
if