题目描述
(子集划分)将 n 个数 ( 1 , 2 , … , n ) (1,2,\dots,n) (1,2,…,n) 划分成 r 个子集。每个数都恰好属于一个子集,任何两个不同的子集没有共同的数,也没有空集。将不同划分方法的总数记为 S ( n , r ) S(n,r) S(n,r)。例如, S ( 4 , 2 ) = 7 S(4,2)=7 S(4,2)=7,这 7 7 7种不同的划分方法依次为 { ( 1 ) , ( 234 ) } , { ( 2 ) , ( 134 ) } , { ( 3 ) , ( 124 ) } , { ( 4 ) , ( 123 ) } , { ( 12 ) , ( 34 ) } , { ( 13 ) , ( 24 ) } , { ( 14 ) , ( 23 ) } . \{(1),(234)\},\{(2),(134)\},\{(3),(124)\},\{(4),(123)\},\{(12),(34)\},\{(13),(24)\},\{(14),(23)\}. {(1),(234)},{(2),(134)},{(3),(124)},{(4),(123)},{(12),(34)},{(13),(24)},{(14),(23)}.当 n = 6 , r = 3 n=6,r=3 n=6,r=3 时, S ( 6 , 3 ) S(6,3) S(6,3)=______________。
(提示:先固定一个数,对于其余的 5 5 5 个数考虑 S ( 5 , 3 ) S(5,3) S(5,3) 与 S ( 5 , 2 ) S(5,2) S(5,2),再分这两种情况对原固定的数进行分析。)
分析
根据题意我们不难得出:
S
(
x
,
r
)
=
S
(
x
−
1
,
r
−
1
)
∗
1
+
S
(
x
−
1
,
r
)
∗
r
S(x,r)=S(x-1,r-1)*1+S(x-1,r)*r
S(x,r)=S(x−1,r−1)∗1+S(x−1,r)∗r,
S
(
x
,
x
)
=
1
S(x,x)=1
S(x,x)=1,
S
(
x
,
1
)
=
1
S(x,1)=1
S(x,1)=1
然后直接求就行了~
(注意:我们可以像写代码一样给自己加一个记忆化,不然会写很多很多)
答案与过程
S(6,3)=S(5,2)+S(5,3)*3
S(5,2):
{
S(5,2)=S(4,1)+S(4,2)*2
S(4,1):
S(4,1)=1
S(4,2):
S(4,2)=S(3,1)+S(3,2)*2
S(3,1):
S(3,1)=1
S(3,2):
S(3,2)=S(2,1)+S(2,2)*2
S(2,1):
S(2,1)=1
S(2,2):
S(2,2)=1;
∴
S(3,2)=1+1*2=3
S(4,2)=1+3*2=7
S(5,2)=1+7*2=15
}
S(5,3):
{
S(5,3)=S(4,2)+S(4,3)*3
S(4,2)=7
S(4,3):
S(4,3)=S(3,2)+S(3,3)*3
S(3,2)=3
S(3,3):
S(3,3)=1
∴
S(4,3)=3+1*3=6
S(5,3)=7+6*3=25
}
∴
S(6,3)=15+25*3=90
本题答案:90