我正在尝试制作一个程序,当给定特定值(例如1、4和10)时,它将尝试获取每个值要达到一定数量(例如19)所需的数量。
它将始终尝试使用尽可能多的高值,因此在这种情况下,结果应为10 * 1、4 * 2、1 * 1。
我试图考虑一下,但是最终无法找到一个可行的算法...
欢迎任何帮助或提示!
答案 0 :(得分:0)
这是一个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)]
答案 1 :(得分:0)
如果有人需要简单的算法,我发现的一种方法是:
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所述,如果跳过较大的数字,而仅使用较小的数字,则将不起作用!我将尝试对其进行改进,并在发布新版本时起作用)