Python 背包的变化

Python 背包的变化,python,algorithm,dynamic-programming,heuristics,Python,Algorithm,Dynamic Programming,Heuristics,您的工作是将n对象打包到盒子中。每个箱子可以有一个或两个物品,箱子中物品的总重量最大为x。箱子的最小数量是多少 我不知道这里的问题是背包还是别的什么 我有一个普通的背包 def背包(x,wt,值,n): 如果n==0或x==0: 返回0 如果(wt[n-1]>x): 返回背包(x,wt,值,n-1) 其他: 返回最大值(val[n-1]+背包(x-wt[n-1],wt,val,n-1),背包(x,wt,val,n-1)) 但我不知道如何修改这个?而且,我似乎在这里寻找最小值,而不是最大值。这也

您的工作是将
n
对象打包到盒子中。每个箱子可以有一个或两个物品,箱子中物品的总重量最大为
x
。箱子的最小数量是多少

我不知道这里的问题是背包还是别的什么

我有一个普通的背包

def背包(x,wt,值,n):
如果n==0或x==0:
返回0
如果(wt[n-1]>x):
返回背包(x,wt,值,n-1)
其他:
返回最大值(val[n-1]+背包(x-wt[n-1],wt,val,n-1),背包(x,wt,val,n-1))

但我不知道如何修改这个?而且,我似乎在这里寻找最小值,而不是最大值。这也可能是子集总和的一些变化吗?

您不需要在这里背包,因为所有项目都必须打包。您也不需要使用装箱,因为您的箱子限制为1或2个对象。贪婪算法要简单得多。采取以下行动:

  • 将物体从最重到最轻排序
  • 取最重的物体为
    H
    ,最轻的物体为
    L
    。如果
    H+L>x
    ,则没有其他对象
    H
    可以打包,必须自行打包。否则,将
    H
    L
    打包在一起会使盒子最小化,因为将
    L
    与任何其他对象放在一起不会进一步减少盒子的数量(作为证据,请查看如果某个其他对象可以与
    L
    打包,但不能与任何其他对象打包,则
    H
    也不能与该其他对象打包)
  • 重复此操作,直到所有对象都已打包
  • 这是一种O(nlog(n))解决方案,通过限制每个箱子的物品数量而成为可能。如果物品的数量没有限制,那么你就不得不求助于箱子包装