我的dp编程代码在给定价格限制下找到最大利润有什么问题?背包的变化?

时间:2018-08-23 08:32:16

标签: python dynamic-programming knapsack-problem

嗨,我是Python的新手,我有以下列表:

product_list=[[0, 'Cool Blue Marella Jug', 33, 15], [1, 'Weight Loss Pack', 55, 16], [2, 'Weight Loss Pack', 10, 16]]

,第一个数字基本上是指数,第二个数字(33,55,10)是价格,第三个数字(15,16,16)是利润。给定价格上限为15,在这种情况下,我的代码应显示最大利润,显然是16。但是它打印的是32?

这是我的代码:

def dp_pricelimit(product_list, price_limit):
   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_limit:
                balance=price_limit-item[2]
                profit=item[3] + memo[balance]
             if profit>memo[price]:#if found new optimal
                 memo[price]=profit
    return memo[price_limit]

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

好的,对不起,我刚刚意识到这应该是价格而不是price_limit。为了 if语句

if item[2]<=price_limit 

我的坏。后面的那一行也应该是价格。