2*k
元组(a0,b0),(a1,b1),...以及2个分档A和B。将i-th
元组放入分档A
中会花费您ai
美元,在容器B
中将花费您bi
美元。将k
元素放入垃圾箱A和k
元素放入垃圾箱B的最低成本是多少。我想出了贪心算法:以abs(ai - bi)
为键,按降序对元组数组进行排序。但是,我们可以通过使用动态编程来解决此问题吗?如果有n
个垃圾箱而不是两个垃圾箱怎么办?
答案 0 :(得分:3)
让dp[i][j]
为将第i个元素的第j个元素放入垃圾箱A的最小成本,例如dp[0][0]
为第0个元素的A中放置0个元素的最小成本; dp[4][2]
是前4个元素中将2个元素放入A的最低成本
然后:对于ith
元素(索引为i - 1
,所以我使用b[i - 1]
和a[i - 1]
),我们需要将其放在bin A或bin B中。因此,我们计算了两种情况的最小值:
dp function: dp[i][j] = Math.min(dp[i - 1][j] + b[i - 1], dp[i][j - 1] + a[i - 1])
然后问题是获取dp[2*k][k]