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

Python 我的dp编程代码在给定价格限制的情况下寻找最大利润有什么问题?背包的变化?,python,dynamic-programming,knapsack-problem,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_p

嗨,我是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]
def dp_价格限制(产品清单、价格限制):
备注=[0]*(价格上限+1)
备注[0]=0
对于范围内的价格(1,价格限制+1):
对于产品列表中的项目:#检查项目
如果项目[2]备注[价格]:#如果发现新的最优
备注[价格]=利润
退货通知单[价格限额]

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

好吧,对不起,伙计们,我刚意识到应该是价格而不是价格限制。对于 if语句

if item[2]<=price_limit 

如果项[2]很抱歉,它已编译,但当我尝试在此处格式化时,标识已关闭,它仍处于关闭状态……那么您能告诉我它在哪里关闭了吗?是不是太离谱了,以至于你无法分辨哪些if语句和循环去了哪里?我只知道我的代码是编译的,但它给我的是32而不是16,这是正确的答案。即使有正确的缩进,我也会得到一个UnboundLocalError,因为如果我使用上面的产品列表和15的价格限制运行您的代码,那么在分配之前的if中会引用可变利润