1114. Boxes(timus)

题意理解

A个红球、B个蓝球放入一排盒子(N)中,盒子可以空,球可以放可以不放,红球蓝球可以混合放也可以单放。问有多少种方放法?

问题分析

组合数学问题

红球、蓝球分开计算放法,然后将两数相乘。

子问题:A个相同的球放到N个不同的盒子,球可以剩余,也可以有空盒子,问有多少种放法?

子问题解答:

用隔板法

一步转化:最终放法是0个球放到N个不同盒子(球都放完)的数量, 加上1个球放到N个不同盒子(球都放完)的数量,... 加上A个球放到N个不同盒子(球都放完)的数量。

二步转化:A个球放到N个不同盒子(球都放完)的数量,可看成是有N+A个小球拍成一排,中间有N+A-1个隔板,从N+A-1个隔板中抽走A个隔板,剩余隔板数就为N-1个,剩余隔板将N+A个球分成了N组,因为A个小球是附加的“空球”,分组时如果单独分到了空球那就表明对应的盒子为空。数量为组合数C(A,N+A-1)。

三部转化:求组合数C(A,N+A-1)算法,不用(N+A-1)!/((N-1)! * A!) 或是(M+A-1)(M+A-2)...(M-1)/M!,阶乘计算量太大。改用递推式C(A,N+A-1) = C (A-1,N+A-2)* (N+A-1) / A。

其他

隔板法是我不会的,学习了。

 百度百科链接:https://baike.baidu.com/item/%E9%9A%94%E6%9D%BF%E6%B3%95/3902458?fr=aladdin

代码链接

https://github.com/xierensong/learngit/blob/master/timus/t1114_2.cpp

猜你喜欢

转载自blog.csdn.net/xiexie1357/article/details/81183584