作者yauhh (哟)
看板Programming
标题Re: [问题] 排列组合,相同物品分发制不同容器
时间Sat Apr 14 10:46:50 2012
※ 引述《lovesnake (【忠犬攻一枚】)》之铭言:
: ※ 引述《yauhh (哟)》之铭言:
: : 看最後一句,猜你的方法有一点特殊性或限制,所以数量少於堆数的二倍才会成功.
: : 假设有八个东西要分三堆,你会先整理出
: : 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
: 这是所有的相同东西分到相同堆的结果
: 该怎麽用演算法跑出这样的结果呢?
这部份应该是简单到不需要讲的吧. 方法很明确,只看你程式会不会写而已.
对总和8来说,要分为三个数字,因为每个数字至少为1,所以每个数字最多填到6.
所以这是六取三排列,但限定总和为8.
: 且如果用出另外六组组合,也会有重复的必须做後面的剔除动作
: 可能有耗效能之嫌 (虽然微不足道啦)
: 对您的想法不了解的大概这两点,谢谢!!
所谓重复,是什麽重复,堆的重复或者是东西的重复?
我以为你是拿那些东西虽然每个都相同,但彼此仍视为不同 (如东西上有打编号之类)
如果是把东西全都看成相同,分堆会变得比较简单,甚至不用分了, 1 1 6 就是一种分堆
情况, 1 2 5 是第二种情况, ......等.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.231.67.34
※ 编辑: yauhh 来自: 61.231.67.34 (04/14 10:47)