<p>所以你需要划分为3个大小为4,3,3的块,其中(1,2,3)在一个块中,(7,8)在一个块中。在</p>
<p>这意味着1,2,3和7,8不能在同一个块中。在</p>
<p>先忘了键盘,分析一下问题</p>
<p>IMHO,你应该分开三个案例:</p>
<ul>
<li>1、2、3为4号块(情况1)</li>
<li>7,8为4号块(情况2)</li>
<li>不是1,2,3也不是7,8,大小为4的块(情况3)</li>
</ul>
<h2>案例1</h2>
<ul>
<li>(0,4,5,6,9)中的一个元素放入包含(1,2,3)的块中</li>
<li>(0,4,5,6,9)中的另一个元素位于包含(7,8)的块中</li>
</ul>
<p>总计:5*4=20个不同分区</p>
<h2>案例2</h2>
<ul>
<li>(0,4,5,6,9)中的两个元素进入包含(7,8)的块中</li>
</ul>
<p>总计:5*4/2=10个不同的分区(/2,因为您需要组合而不是排列)</p>
<h2>案例3</h2>
<ul>
<li>(0,4,5,6,9)中的一个元素位于包含(7,8)的块中</li>
</ul>
<p>总计:5个不同分区</p>
<p>所以你知道你应该有35个不同的分区</p>
<p>Python代码:</p>
<pre><code>def gen():
B1 = [1,2,3]
B2 = [7,8]
C = [x for x in range(10) if x not in B1 + B2 ]
def gen1():
for x in C:
c = C[:]
b1 = B1[:]
b1.append(x)
c.remove(x)
for y in c:
c1 = c[:]
b2 = B2[:]
b2.append(y)
c1.remove(y)
yield(b1, b2, c1)
def gen2():
for i in range(len(C)-1):
for j in range(i+1, len(C)):
b2 = B2 + [C[i], C[j]]
c = [C[k] for k in range(len(C)) if k not in (i,j)]
yield (B1, b2, c)
def gen3():
for x in C:
b2 = B2[:]
c = C[:]
c.remove(x)
b2.append(x)
yield(B1, b2, c)
for g in (gen1, gen2, gen3):
for t in g():
yield t
</code></pre>
<p>你得到的是:</p>
^{pr2}$
<p>(手动格式化以便于阅读…)</p>