Algorithm 以最低成本分成n个箱子 考虑2*k元组(a0,b0),(a1,b1)。。。和2个箱子A和B。将i-th元组放入箱子A将花费您ai美元,放入箱子B将花费您bi美元。将k元件放入料仓A和k元件放入料仓B的最低成本是多少

Algorithm 以最低成本分成n个箱子 考虑2*k元组(a0,b0),(a1,b1)。。。和2个箱子A和B。将i-th元组放入箱子A将花费您ai美元,放入箱子B将花费您bi美元。将k元件放入料仓A和k元件放入料仓B的最低成本是多少,algorithm,sorting,dynamic-programming,knapsack-problem,greedy,Algorithm,Sorting,Dynamic Programming,Knapsack Problem,Greedy,我提出了贪婪算法:以abs(ai-bi)为键,按降序对元组数组进行排序。然而,我们能用动态规划来解决这个问题吗?如果有nbin而不是两个呢。让dp[i][j]成为第一个i元素放入bin A的最小成本,例如,dp[0][0]是第一个0元素放入A的最小成本dp[4][2]是将2个元素放入A中的前4个元素的最低成本 然后:对于ith元素(索引为i-1,因此我使用b[i-1]和a[i-1]),我们需要将其放入料仓a或料仓b中。因此,我们计算两种情况下的最小值: dp函数:dp[i][j]=Math.mi

我提出了贪婪算法:以
abs(ai-bi)
为键,按降序对元组数组进行排序。然而,我们能用动态规划来解决这个问题吗?如果有
n
bin而不是两个呢。

dp[i][j]
成为第一个i元素放入bin A的最小成本,例如,
dp[0][0]
是第一个0元素放入A的最小成本
dp[4][2]
是将2个元素放入A中的前4个元素的最低成本

然后:对于
ith
元素(索引为
i-1
,因此我使用
b[i-1]
a[i-1]
),我们需要将其放入料仓a或料仓b中。因此,我们计算两种情况下的最小值:

dp函数:dp[i][j]=Math.min(dp[i-1][j]+b[i-1],dp[i][j-1]+a[i-1])


然后问题是获得
dp[2*k][k]

您好,请参阅本页,询问通常会被提升的好问题,这有助于获得好答案。您可以解释一下如何使用排序结果填充垃圾箱吗?如何保证总成本最小化?提示:自下而上思考。考虑填充最后一个箱子,它必须是A或B。假设它是B。那么B的剩余元组是k-1,而A的剩余元组是k。或者如果是A,A的剩余值是k-1,B的剩余值是k。因此,填充最后一个存储箱的最小成本是最小成本(B为k-1元组,A为k元组)+bi,成本(B为k元组,A为k-1元组)+ai,现在考虑递归实现,然后记忆。@trincot您可以通过将排序列表一分为二来使用它。至于为什么它是最好的,采取任何其他部门。不按特定顺序将其拉出以获得未排序的列表。用气泡排序法对其进行排序,跟踪划分。每次交换要么将成本单独保留(在仓位内交换),要么降低成本(跨仓位边界交换),直到您停止在此交换。因此,没有其他部门比这更好了。@B当然,谢谢你的评论,但我实际上是想让OP澄清他们的问题。我们无法从他的问题中知道他对排序结果做了什么,在问题中提到这一点似乎是相关的。还有一个关于效率的注释。这是
O(k^2)
。对
n
桶的自然泛化将是
O(k^n)
。对于
n=2
而言,贪婪方法更好。