算法:
HDU - 6397 Character Encoding 插板法+容斥原理 https://blog.csdn.net/xiang_6/article/details/81868989
[ACM] POJ 1664 放苹果(n个相同小球放入m个相同盒子) https://blog.csdn.net/sr_19930829/article/details/38293297
m个相同的bean和n棵不同的树,每棵树可以放也可以不放beans https://blog.csdn.net/moon_sky1999/article/details/81835284
n个球放入m个盒子,使用程序输出所有的放法? https://www.zhihu.com/question/51448931
1.球同,盒不同,无空箱
C(n-1,m-1), n>=m 使用插板法:n个球中间有n-1个间隙,现在要分成m个盒子,而且不能有空箱子,所以只要在n-1个间隙选出m-1个间隙即可 2.球同,盒不同,允许空箱 C(n+m-1,m-1) 我们在第1类情况下继续讨论,我们可以先假设m个盒子里都放好了1个球,所以说白了就是,现在有m+n个相同的球,要放入m个不同的箱子,没有空箱。也就是第1种情况 3.球不同,盒相同,无空箱 第二类斯特林数dp[n][m] 这种情况就是第二类斯特林数,我们来理解一下这个转移方程。 对于第n个球,如果前面的n-1个球已经放在了m个箱子里,那么现在第n个球放在哪个箱子都是可以的,所以m*dp[n-1][m]; 如果前n-1个球已经放在了m-1个箱子里,那么现在第n个球必须要新开一个箱子来存放,所以dp[n-1][m-1] 其他的都没法转移过来 4.球不同,盒相同,允许空箱 sigma dp[n][i],0<=i<=m,dp[n][m]为情况3的第二类斯特林数 这种情况就是在第3种情况的前提下,去枚举使用的箱子的个数 5.球不同,盒不同,无空箱 dp[n][m]*fact[m],dp[n][m]为情况3的第二类斯特林数,fact[m]为m的阶乘 因为球是不同的,所以dp[n][m]得到的盒子相同的情况,只要再给盒子定义顺序,就等于现在的答案了 6.球不同,盒不同,允许空箱 power(m,n) 表示m的n次方 每个球都有m种选择,所以就等于m^n 7.球同,盒同,允许空箱 dp[n][m]=dp[n][m-1]+dp[n-m][m], n>=m 现在有n个球,和m个箱子,我可以选择在所有箱子里面都放上1个球,也可以不选择这个操作。 如果选择了这个操作,那么就从dp[n-m][m]转移过来 如果没有选择这个操作,那么就从dp[n][m-1]转移过来 8.球同,盒同,无空箱 dp[n-m][m],dp同第7种情况,n>=m 因为要求无空箱,我们先在每个箱子里面放1个球,然后还剩下n-m个球了,再根据情况7答案就出来了 例8-1:8个不同的球放进3个不同的盒子里,有几种方法? 每个球都有3种选择,8个球就有3^8=6561 -------------------------------------------------------------------- 例5-1:8个不同的球放进3个相同的盒子里,每盒至少一个,有几种方法? 公式法:S(N, M)=S(8, 3)。第8行的第3列,对着表格找相应的数为966 -------------------------------------------------------------------------------- 例6-1:8个不同的球放进3个相同的盒子里,有几种方法 ? 公式法: S(8,3)=S (8, 1) + S(8, 2) + S(8, 3)=1+127+966=1094。即为第8行前3列的和。 注:这种类型结合第8种更简单些,在例8-1中,3个元素都相异,比如116,一共有6种排列(球是不同的),此问中,盒子是相同的,因此这6种排列都只算一种情况。 但如果2个元素相同的时候,有且只有 008,只有3种排列,我们多添加3种进去,令其也重复6次,则(6561+3)就是所有的情况都重复了6次,(6561+3)/6=1094即为所求。 -------------------------------------------------------------------------------- 例7-1:8个不同的球放进3个不同的盒子里,每盒至少一个,有几种方法 ? 公式:M! * S(N, M)=3!*S(8, 3)=6*966=5796 -------------------------------------------------------------------------------- 现在剩下怎么记上面这个表格了,其实记这个表格非常简单: 1、先写好行号1---9和列号1---9。 2、然后前3个数字写1。 4、左右两边都是1,第几行就有几个数,比如第5行就是1XXX1。 5、 S(r, c) = S(r-1,c-1) + c * S(r-1, c),含义是第r排的第c个数等于他上一排的上一个位置数字加上一排的同样位置数字的c倍(对着上表的行号和列号看,很容易记)。r=row,c=column. 例如S(7, 3) 就是第7排第3个数字,所以他等于上排第6排第2个数字+第6排第3个位置*3。 所以画图的话,明显第1排是1,第2排1,1,推理第3排(左右两边都是1,只有中间那个数字没确定)。 所以 S(3, 2) = 第2排第1个数字+第2排第2个数字*2 = 1+1*2 = 3,所以第3排数字就是1,3,1。同理 S(4, 2) = S(3, 1)+ 2S(3, 2) = 1+2*3 = 7, ... 如此类推。 --------------------------------------------------------------------------------
0, n
dp[n][m]=m*dp[n-1][m]+dp[n-1][m-1],1<=m
dp[k][0]=0,k>=1
0,n
dp[n][m]=dp[n][m-1], n
0, n对以上1,2,5,6,7,8公式作解释说明,3,4不用解释了,插板法
先说:
8、球不同,盒不同,盒可以为空 M^N
不妨设这N个小球为a1 , a2 ,…,an .首先把a1 放进盒子里,因为M个盒子是不同的,所以有M种放法,同理,a2 ,…,an放进盒子里都有M种放法,依乘法原则知不同的方案数 N = M*M*。。。M(共N个)=M^N
例8-2:某单位今年新进了3 个工作人员,可以分配到3 个部门,但每个部门至多只能接收2 个人,问:共有几种不同的分配方案?
A.12 B.16 C.24 D.以上都不对
3^3-3=24
接下来说:
1、球同,盒同,盒不可以为空 Pm(N)
2、球同,盒同,盒可以为空 Pm(N+M)
----------------------------------------------
首先要记得:
P1(n)=1 , Pn(n)=1, Pn-1(n)=1
P2(n)=[n/2] --[]表示不超过n/2的最大整数
Pn+1(n)=0 --或者表示没意义,因为n个球要放到n+1个盒子中,又不允许为空,没意义。
公式:Pm(N)=P1(N-m)+P2(N-m)+P3(N-m)+......+Pm(N-m) ------(共M项)
有人可能会说上面这几个都难得记,你只要明白拆分或结合实际意思就容易知道了,比如Pn(n)=1,n个球放n个盒子,每个盒子又不能为空,肯定只有1种。
--------------------------------------------------------------------------------
例2-1:7个相同球放入4个相同盒子,每盒至少一个,有多少种放法?
方法一,公式法。
代入公式:Pm(N)=P1(N-m)+P2(N-m)+P3(N-m)+......+Pm(N-m)
P4(7)=P1(3)+P2(3)+P3(3)-------P4(3),没意义省去
=1+1+1
=3,故有3种
方法二,拆数法。
1、先每个盒子放一个,还剩下3个球;
2、把“3”这个数拆成4个数(因为4个盒子)有如下:
3000 2100 1110---------拆数时不考虑顺序
---------------------------------------------------------------------------------------
例1-1:7个相同球放入4个相同盒子,可以空盒,有多少种放法?
方法一,公式法。
代入公式:Pm(N)=P1(N-m)+P2(N-m)+P3(N-m)+......+Pm(N-m)
P4(7+4)= P4(11)
=P1(7)+P2(7) +P3(7) +P4(7)
=1+3+(P1(4)+ P2(4)+ P3(4))+( P1(3)+ P2(3)+ P3(3)+ P4(3))
=1+3+(1+2+1)+(1+1+1+0)
=4+4+3
=11,故有11种
方法二,拆数法。
1、先借4个球来,每个盒子放一个,还剩下7个球;
2、把“7”这个数拆成4个数(因为4个盒子)有如下:
0007 0016 0025 0034 0115 0124 0133 0223 1114 1123 1222
--------------------------------------------------------------------------------
例2-2:10个相同的小球放进5个相同的盒子,使得无一空盒,共有多少种放法?
解析:
10个放了5个,还有5个。
5个放到1个盒,放到2个盒,放到3个盒。。。。放到5个盒,列式:
P5(10)
=P1(5)+P2(5)+P3(5)+P4(5)+P5(5)
=1+2+[P1(2)+P2(2)]+1+1
=1+2+[1+1]+1+1
=7
--------------------------------------------------------------------------------
最后来说复杂的:
5、球不同,盒同,盒不可以为空 S(N, M)
6、球不同,盒同,盒可以为空 S (N, 1) + S(N, 2) + S(N, 3) + ... + S(N, M)
7、球不同,盒不同,盒不可以为空 M! * S(N, M)
--------------------------------------------------------------------------------
S2(N ,M)
1
2
3
4
5
6
7
8
9
1
1
2
1
1
3
1
3
1
4
1
7
6
1
5
1
15
25
10
1
6
1
31
90
65
15
1
7
1
63
301
350
140
21
1
8
1
127
966
1701
1050
266
28
1
9
1
255
3025
7770
6951
2646
462
36
1
上面就是传说的:第二类斯特林数(第二类Stirling数)----可以百度下
S(N, M)表示什么意思呢?就是第N行M列的数字,例如S(7, 3) 就是第7行第3个数字。
--------------------------------------------------------------------------------
例7-2:4名教师分派到3所中学任教,每所至少1名教师,则有不同的分派方案多少种?
公式:M! * S(N, M)=3!*S(4, 3)=6*6=36
四、练习题
1、8个相同的球放进4个相同的盒子里,每盒至少一个,有几种方法 ?
2、8个相同的球放进4个不同的盒子里,每盒至少一个,有几种方法 ?
3、8个不同的球放进4个不同的盒子里,每盒至少一个,有几种方法 ?
4、8个不同的球放进4个相同的盒子里,每盒至少一个,有几种方法 ?
5、8个相同的球放进4个相同的盒子里,有几种方法 ?
6、8个相同的球放进4个不同的盒子里,有几种方法 ?
7、8个不同的球放进4个不同的盒子里,有几种方法 ?
8、8个不同的球放进4个相同的盒子里,有几种方法 ?
9、8个不同的球平均分给4个小朋友,有几种分法 ?
10、8个不同的球平均分成4堆,有几种分法 ?
--------------------------------------------------------------------------------
下面是我做的,不一定是正确答案,大家可以先做了对一下结果,不同再讨论下:
1、8个相同的球放进4个相同的盒子里,每盒至少一个,有几种方法 ?
公式:球相同,盒相同,拆分公式。
P4(8)=P1(4)+P2(4)+P3(4)+P4(4)
=1+2+1+1
=5
2、8个相同的球放进4个不同的盒子里,每盒至少一个,有几种方法 ?
公式:球相同,盒不同,插板法。
C(8-1,4-1)
=C(7,3)
=7*6*5/6
=35
3、8个不同的球放进4个不同的盒子里,每盒至少一个,有几种方法 ?
公式:球不同,盒不同,不为空,阶乘和二类斯特林数,球是行号,盒子是列号。
M!*S(N,M)
=4! * S(8,4)
=24*1701
=40824
4、8个不同的球放进4个相同的盒子里,每盒至少一个,有几种方法 ?
公式:球不同,盒同,二类斯特林数,为空是累加,不为空是直接取数,球是行号,盒子是列号。
S(N,M)
=S(8,4)
=1701
5、8个相同的球放进4个相同的盒子里,有几种方法 ?
公式:球同,盒同,为空,拆分公式。
P4(8+4)=P4(12)
=P1(8)+P2(8)+P3(8)+P4(8)
=1+4+(P1(5)+P2(5)+P3(5))+(P1(4)+P2(4)+P3(4)+P4(4))
=1+4+(1+2+(P1(2)+P2(2))+(1+2+1+1)
=1+4+5+5
=15
6、8个相同的球放进4个不同的盒子里,有几种方法 ?
公式:球同,盒不同,插板法。
C(11,3)
=11*10*9/6=15*11=165
7、8个不同的球放进4个不同的盒子里,有几种方法 ?
公式:球不同,盒不同,为空,直接是M^N
4^8=4^4*4^4=2^8*2^8=256*256=65536
8、8个不同的球放进4个相同的盒子里,有几种方法 ?
公式:球不同,盒同,二类斯特林数,为空,是累加
S (N, 1) + S(N, 2) + S(N, 3) + ... + S(N, M)
=S(8,1)+S(8,2)+S(8,3)+S(8,4)
=1+127+966+1701
=2795
9、8个不同的球平均分给4个小朋友,有几种分法 ?
从8个球中取2个分给第1个小朋友,从剩下6个中取2个来分给第二个小朋友。。。
C(8,2)*C(6,2)*C(4,2)*C(2,2) = 2520
10、8个不同的球平均分成4堆,有几种分法 ?
C(8,2)*C(6,2)*C(4,2)*C(2,2) / 4!= 2520/24 =105