以最低成本划分到n个垃圾箱

时间:2018-10-05 12:11:40

标签: algorithm sorting dynamic-programming knapsack-problem greedy

  1. 考虑2*k元组(a0,b0),(a1,b1),...以及2个分档A和B。将i-th元组放入分档A中会花费您ai美元,在容器B中将花费您bi美元。将k元素放入垃圾箱A和k元素放入垃圾箱B的最低成本是多少。

我想出了贪心算法:以abs(ai - bi)为键,按降序对元组数组进行排序。但是,我们可以通过使用动态编程来解决此问题吗?如果有n个垃圾箱而不是两个垃圾箱怎么办?

1 个答案:

答案 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]