|
你这写法太高端了,我的只是这样:
假设第一个盒子放n1个,共有C(10,n1)种方法;第二个从剩下的取n2个,共有C(10-n1,n2)种;第三个则是C(10-n1-n2,n3);剩下的全放第四个,第四个永远只有一种选择。所以总共是C(10,n1)*C(10-n1,n2)*C(10-n1-n2,n3)*1
WITH b AS (
SELECT LEVEL-1 n FROM DUAL CONNECT BY LEVEL<=11
)
,p(n,m,pr) AS ( -------- 排列p(n,m)
SELECT n,0,1 FROM b
UNION ALL
SELECT n
,m+1
,pr*(n-m)
FROM p
WHERE m<n
)
,c AS ( ------- 组合:C(n,m)=p(n,m)/p(m,m)
SELECT p1.n,p1.m,p1.pr/p2.pr AS cb
FROM p p1,p p2
WHERE p1.m=p2.m
AND p1.m=p2.n
)
,bx AS (
SELECT b1.n n1,b2.n n2,b3.n n3,10-b1.n-b2.n-b3.n n4
FROM b b1,b b2,b b3
WHERE b1.n+b2.n+b3.n<=10
AND b1.n NOT IN (b2.n,b3.n,10-b1.n-b2.n-b3.n)
AND b2.n NOT IN (b3.n,10-b1.n-b2.n-b3.n)
AND b3.n <>10-b1.n-b2.n-b3.n
)
SELECT SUM(c1.cb*c2.cb*c3.cb) ----C(10,n1)*C(10-n1,n2)*C(10-n1-n2,n3)
FROM bx,c c1,c c2,c c3
WHERE c1.n=10 AND c1.m=n1
AND c2.n=10-n1 AND c2.m=n2
AND c3.n=10-n1-n2 AND c3.m=n3
;
SUM(C1.CB*C2.CB*C3.CB)--C(10,N1)*C(10-N1,N2)*C(10-N1-N2,N3)
-----------------------------------------------------------
421920
|
|