编写代码找出铁条的最大切割量

Write code that find maximum cuts of an iron bar

我目前正在尝试编写一个 Python 程序,它可以找到 5m 铁棒的最大切割量。 允许的切口为:0.5m、1m、1.2m 和 2m。 鉴于我必须找到所有匹配或接近 5m 的组合。 组合示例:

第二个组合也不错,因为不能切出0.3m,就扔掉了。 组合剂量内的顺序很重要,

7x0.5 + 1.2 = 1.2 + 7x0.5

所以我们只需要计算一次。 所以理想情况下,我的程序接收一个文件,然后编写一个包含所有组合的文件,如:

c1 = 10*0.5 
c2 = 7*0.5 + 1.2 
....

任何人都可以分享从哪里开始的建议吗?谢谢。

也许这就是您要找的东西?

x = [2, 1.2, 1, 0.5]
max_val = 5

def find_next(state, idx, check=False):
    if(idx == len(x)):
        return print_it(state, check)
    if(sum(state) + x[idx] > max_val):
        find_next(state, idx + 1, True)
    else:
        find_next(state + [x[idx]], idx)
        find_next(state, idx + 1)

def print_it(state, check):
    if check:
        print("")
        print(sum(state),state)
    return


find_next([],0)

它递归地寻找下一个值,直到它用完所有值,并使用一个简单的列表跟踪当前状态,该列表使用 print_it 函数打印。我将把格式化和文件存储留给你,这可以很容易地在那个函数中实现。