私はあなたが求めていたものを実装しました
boxSizes, itemSizes = [5, 3, 6], [1, 2, 2, 3, 5]
def recurse(boxes, itemIndex, solution, itemsUsed):
global itemSizes
if itemsUsed == len(itemSizes):
print solution
return
for i in range(len(boxes)):
for j in range(itemIndex, len(itemSizes)):
if boxes[i] - itemSizes[j] >= 0:
boxes[i] -= itemSizes[j]
solution[i].append(itemSizes[j])
recurse(boxes, j + 1, solution, itemsUsed + 1)
solution[i].pop()
boxes[i] += itemSizes[j]
recurse(boxSizes, 0, [[] for i in range(len(boxSizes))], 0)
出力
[[1, 2, 2], [3], [5]]
[[2, 3], [1, 2], [5]]
[[2, 3], [1, 2], [5]]
[[5], [1, 2], [2, 3]]
[[5], [1, 2], [2, 3]]
[[2, 2], [3], [1, 5]]
[[2, 3], [2], [1, 5]]
[[2, 3], [2], [1, 5]]
[[5], [2], [1, 2, 3]]
[[5], [2], [1, 2, 3]]
[[5], [3], [1, 2, 2]]
いくつかの解が繰り返されていることがわかります。これは、入力に同じ数値が 2 つあるためです。