微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决元素个数固定的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 举报,一经查实,本站将立刻删除。