我有一组(值,成本)元组,它们是(2000000,200),(500000,75),(100000,20)
假设X是任何正数。
是否有算法可以找到元组合,这些组合的成本最低,可以存储X的值。
元组值的总和可以等于或大于给定的X
离。
给出x = 800000答案应为(500000,75),(100000,20),(100000,20),(100000,20)
给出x = 900000答案应为(500000,75),(500000,75)
给出x = 1500000答案应为(2000000,200)
我可以对此进行硬编码,但是设置和元组可能会发生变化,所以如果这可以用众所周知的算法替代,那就太棒了。
答案 0 :(得分:2)
这可以通过dinamic编程来解决,因为你对元组的数量没有限制,并且能够提供更高的数量。
首先,您可以优化元组。如果一个大元组可以由具有相同或更低成本以及相等或更高值的较小元组替换,则可以删除更大的元组。 此外,未来的使用也很有成效,按价值/成本按降序排列优化集中的元组。如果价值/成本更高,元组会更好。
时间复杂度O(N * T),其中N是除以优化元组值的公因子(F)的数,并且T是优化元组集中的元组数。 内存复杂度O(N)。
设置大小为N的数组a,其中包含:
递归方案:
可以从每个步骤中的元组列表中检索元组列表,但是遍历.tuple。
可以将整体数组大小降低到最大值(元组值/ F),但是你必须为每个元素保存或多或少的完整解决方案,而不是一个最好的.tuple,你必须做“推拉窗”小心翼翼。 与许多其他动态编程算法一样,可以将递归从0变为n循环。