元素个数固定的Python背包问题

问题描述

到目前为止,我有以下代码,我相信它可以在背包中选择最多 4 个(或 n 个)元素(因此是第 3 维)。但是,我想确保代码始终选择 4 个(或 n 个)元素。有人可以提供建议,因为我在任何地方都找不到关于此的任何信息...

def knapsack2(n,weight,count,values,weights):
    dp = [[[0] * (weight + 1) for _ in range(n + 1)] for _ in range(count + 1)]
    for z in range(1,count + 1):
        for y in range(1,n + 1):
            for x in range(weight + 1):
                if weights[y - 1] <= x:
                    dp[z][y][x] = max(dp[z][y - 1][x],dp[z - 1][y - 1][x - weights[y - 1]] + values[y - 1])
                else:
                    dp[z][y][x] = dp[z][y - 1][x]

    return dp[-1][-1][-1]

w = 10
k = 4
values = [1,2,3,2]
weights = [4,5,1,1]
n = len(values)

# find elements in 
elements=[]
dp=m
while (n> 0):
    if dp[k][n][w] - dp[k][n-1][w - weights[n-1]] == values[n-1]:
        #the element 'n' is in the knapsack
        elements.append(n)
        n = n-1 #//only in 0-1 knapsack
        w -= weights[n]
    else: 
        n = n-1

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)