原题
有 N 件物品和一个容量为 V 的背包。第 i 件物品的费用是 Ci,价值是 Wi。这些
物品被划分为 K 组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包
可使这些物品的费用总和不超过背包容量,且价值总和最大。
由于截止目前,没有刷到对应的经典题目,以下以依赖背包的转化题目进行解析
https://www.cnblogs.com/dengliang356a/p/17473023.html
依赖背包的原始数据:
4500 12
100 3 0
400 5 0
300 5 0
1400 2 0
500 2 0
800 2 4
1400 5 4
300 5 0
1400 3 8
500 2 0
1800 4 0
440 5 10
分组以后的策略:
100:300
400:2000
300:1500
1400:2800 2200:4400 2800:9800 3600:11400
500:1000
300:1500 1700:5700
500:1000 940:3200
1800:7200
分组挑选策略:
F_optimize = collections.defaultdict(int)
for groupIndex in range(len(strategy)):
for volume in range(n+1,0,-1):
for item in strategy[groupIndex]:
if (volume-item.price)<0:
continue
F_optimize[volume] = max(F_optimize[volume],F_optimize[volume-item.price]+item.satisfaction)
pass
pass
pass
print(F_optimize[n])
标签:背包,300,算法,分组,物品,1400,500
From: https://www.cnblogs.com/dengliang356a/p/17473119.html