"""
Test: 给出n个物品的体积A[i]及其价值V[i],将它们装入一个大小为m的背包,最多能装入物品的总价值有多少?
e.g.: 对于物品体积[2,3,5,7]和对应的价值[1,5,2,4],假设背包体积大小为10,最大能够装入的价值为9,也就是
体积为3和7的物品。
"""
def find_max_price(volume_list: list, price_list: list, capacity: int) -> int:
"""
:param volume_list: 物品空间列表
:param price_list: 物品价值列表
:param capacity: 背包空间大小
:return: 装载物品最大价值
"""
res = [0 for x in range(capacity + 1)]
_len = len(volume_list)
# 选择一个物品
for index in range(_len):
# j的遍历范围是最后一个空格~当前选择物品体积
for j in range(capacity, volume_list[index] - 1, -1):
# 更新当前空格最大值:max(当前位置价值,物品价值+空出物品空间处的最大价值)
res[j] = max(res[j], res[j - volume_list[index]] + price_list[index])
return res[capacity]
if __name__ == '__main__':
print(find_max_price([2, 3, 5, 7], [1, 5, 2, 4], 10))