【问题标题】:Optimizing specific numbers to reach value优化特定数字以达到价值
【发布时间】:2018-11-28 18:33:36
【问题描述】:

我正在尝试编写一个程序,当给定特定值(例如 1、4 和 10)时,它将尝试获取每个值需要多少才能达到一定数量,例如 19。
它总是会尝试使用尽可能多的高值,因此在这种情况下,结果应该是 10*1、4*2、1*1。 我尝试过思考,但最终无法找到可行的算法...

欢迎任何帮助或提示!

【问题讨论】:

标签: optimization divide


【解决方案1】:

这是一个 python 解决方案,它会尝试所有选择,直到找到一个。如果您按降序传递它可以使用的值,则第一个找到的将是使用最高值的值:

def solve(left, idx, nums, used):
        if (left == 0):
            return True
        for i in range(idx, len(nums)):
            j = int(left / nums[idx])
            while (j > 0):
                used.append((nums[idx], j))
                if solve(left - j * nums[idx], idx + 1, nums, used):
                    return True
                used.pop()
                j -= 1
        return False      
solution = []        
solve(19, 0, [10, 4, 1], solution)
print(solution) # will print [(10, 1), (4, 2), (1, 1)]  

【讨论】:

    【解决方案2】:

    如果有人需要一个简单的算法,我找到的一种方法是:
    sort the values, in descending order keep track on how many values are kept for each value, do: if the sum is equal to the target, stop if it isn't the first value, remove one of the previous values while the total sum of values is smaller than the objective: add the current value once

    祝你有美好的一天!

    (正如juviant所提到的,如果跳过较大的数字,这将不起作用,并且只使用较小的数字!我会尝试改进它并在我让它工作时发布一个新版本)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 2022-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 2017-09-06
      相关资源
      最近更新 更多