作者lovesnake (【忠犬攻一枚】)
站内Programming
标题Re: [问题] 排列组合,相同物品分发制不同容器
时间Sat Apr 14 10:33:07 2012
※ 引述《yauhh (哟)》之铭言:
: ※ 引述《lovesnake (【忠犬攻一枚】)》之铭言:
: : 求标题之演算法
: : 其实就是分堆啦
: : 假设有五个东西,分成三堆有几种分法这样
: : 1 1 3
: : 1 2 2
: : 2 1 2
: : 2 2 1
: : 1 3 1
: : 3 1 1
: : 没有按照顺序,不过需要列印出来的大概像这样。
: : 因为是分到不同容器所以会有差别,所以内部是个SET而不是序列。相同的不能删。
: : 谢谢!!
: : 已经想过很多方法,不过最终只做到东西的数量<堆数*2的时候才能成功。
: : 大於的演算法始终想不出来。
: 看最後一句,猜你的方法有一点特殊性或限制,所以数量少於堆数的二倍才会成功.
: 假设有八个东西要分三堆,你会先整理出
: 1 1 6
: 1 2 5
: 1 3 4
: ......
: 这意思是说, 1 1 6 的情况,你要先随便取一个,然後随便取一个,然後剩下六个放到
: 第三堆,这样是一些组合. 1 2 5 的情况要做另一些组合. 然後 1 3 4 的情况再做
: 另一些组合. 其他也一样.
: 这样应该不会当东西数目超过堆数的二倍时无法分堆了.
我原本的想法是把物品分成三堆各一个,然後剩下假如说是两个
用字典顺序排出以後,找出个数 = 剩余物品个数的SubSet
加到原本的三堆里面...
您那个想法....是说先做出单一情况,然後在排列组合,有另外6种组合
最後列出全部的意思吗?
不过列出单一情况这边的演算法就卡住了Orz
1 1 6
1 2 5
1 3 4
2 1 5
2 2 4
2 3 3
这是所有的相同东西分到相同堆的结果
该怎麽用演算法跑出这样的结果呢?
且如果用出另外六组组合,也会有重复的必须做後面的剔除动作
可能有耗效能之嫌 (虽然微不足道啦)
对您的想法不了解的大概这两点,谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.121.216.68