我需要一个算法来检查数组是否可以分为2
,或者通常是否有任意数量的子数组(不需要是连续的),这样数组的所有元素之和都不会超过一定数量。我相信它基本上必须用动态编程做一些事情。这是我在Python中的代码:
def func(array, pile1, pile2, memo={}):
if len(array) == 1:
return (array[0] <= pile1 or array[0] <= pile2)
elif sum(array) <= pile1 or sum(array) <= pile2:
return True
elif max(array) > max(pile1, pile2):
return False
elif sum(array) > pile1 + pile2:
return False
elif (array, pile1, pile2) in memo:
return memo[(array, pile1, pile2)]
elif (array, pile2, pile1) in memo:
return memo[(array, pile2, pile1)]
else:
item = array[-1]
array = array[:-1]
pos1 = func(array, pile1-item, pile2, memo) if pile1-item >= 0 else False
pos2 = func(array, pile1, pile2-item, memo) if pile2-item >= 0 else False
memo[(array, pile1, pile2)] = pos1 or pos2
return memo[(array, pile1, pile2)]
两个pile
最初包含最大值。
我在网上搜索,发现没有这样的解决方案。你能帮帮我吗?
感谢。