m = 5;
n = 6;
caseList = IntegerPartitions[m, n];
f[case_] := Module[{},
Times
@@((Times @@
Binomial[FoldList[
#1 - #
2 &,
#1, Most@#
2], #2]) &
@璐村惂鐢ㄦ埛_053SRMK馃惥{{m,
case}, {n, Tally[case][[All, 2]]}})]
GroupBy[{Max@
#, f[#
]} & /@ caseList, First, Total[#[[All, 2]]] &]/n^m
由挡板法可知,m个球放入n个杯子最终可能的状态数是C(m+n-1, n-1),其量级远远小于穷举的n^m,因此可以先用IntegerPartitions列出所有可能的状态数,再针对每种状态数计算对应的分布数,最后统计即可。这样速度比较快,即使m取到50也能1秒之内出结果