Допустим, мы имеем группу 1,2,3 Таким образом, возможные подгруппы:Как найти все возможные подгруппы в группе
{1,2,3}
{1} {2,3}
{1,2} {3}
{1,3} {2}
{1} {2} {3}
Вы получаете идею.
Я должен сделать это, используя рекурсию. То, что я до сих пор (не работает), и это немного другое. Идея состоит в том, что у вас есть список ints, который представляет кубы (для создания башни), и вы хотите построить столько вышек, сколько сможете, с определенной высоты. Итак, скажем, вы получите список кубов [5,2,6,6,1,1,4]
, а высота, которую вы хотите, - 7
, тогда лучшим вариантом будет [5,2] [6,1] [6,1] [4]
.
код:
def find_tower(blocks, height):
def solve(groups, cur_group, index):
if index == len(blocks):
return groups
if sum(cur_group) == height:
new_group = list(groups)
new_group.append(cur_group)
return solve(new_group, [], index)
elif sum(cur_group) > height:
return solve(groups, [], index)
r1 = solve(groups, cur_group + [blocks[index]], index+1)
r2 = solve(groups, cur_group, index+1)
return max(r1, r2, key=lambda x: len(x))
return solve([], [], 0)
, но я просто получить [5,2] [6,1]
. Есть идеи?
почему '[4]' 'является 7' высота башни? можете ли вы лучше объяснить, что ваш алгоритм предполагает? – Elisha
Вы ищете [установить разделы] (http://en.wikipedia.org/wiki/Partition_of_a_set). Вероятно, вы найдете для этого некоторые алгоритмы. – poke
4 не башня, ее просто остатки, вам нужно построить столько башен, сколько вы можете – user2918984