def dp_pricelimit(product_list, price_limit):
#to store results
chosenProduct=[None]*(price_limit+1)
memo=[0]*(price_limit+1)
memo[0]=0
for price in range(1, price_limit+1):
for item in product_list:#go through the items
if item[2]<=price:
balance=price-item[2]
profit=item[3] + memo[balance]
if profit>memo[price]:#if found new optimal
memo[price]=profit
chosenProduct[price]=item[0]
#use list to store list of item
items = []
#set i, the current price, to max price
i = price_limit
#while i is not a negative price
while i >= 0:
if chosenProduct[i] == None:
break
#append the item that was last added to make the optimal profit at price i.
items.append(chosenProduct[i])
#then jump back to before we added this item by decrementing the i, the current price, by the price of the last item that was added.
i-=product_list[items[-1]][2]
return memo[price_limit],items
print(dp_pricelimit([[0, 'Cool Blue Marella Jug', 33, 15],[1, 'Weight Loss Pack', 55, 16], [2, 'Natural Black Vogue Lashes', 10, 2], [3, 'Paris Age Perfect Intense Nutrition Serum', 45, 22]],88))
基本上,使用chosenproduct数组向后迭代。最后一项增加以创造最优值;它的成本可以减去以增加前的价格得到最优值。然后在下一个价格中,我们添加最后一个项目,以获取chosenproduct数组中的当前价格。祝你好运;)