举报
您需要 登录 才可以下载或查看,没有账号?注册
hearts 发表于 2022-06-17 13:08 插板法 20个球 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19个空,插4个板 C19,4 = 19*18*17*16/4/3/2 = 3876
水库不水 发表于 2022-06-17 10:07 如果没有每个盒子的数量不相同这个条件,挡板法最好,这个题目里面有这个条件,还是8楼的算法好些感觉
水库不水 发表于 2022-06-17 10:04 先用挡板法(C19,4),不知道怎么输入,结果是19*18*17*16/2*3*4 = 3876 然后把有相同的个数排除掉(用枚举法把5个都相同,4个相同,3个相同,2个相同的再排除掉)
潜水专家001 发表于 2022-6-17 13:40 你这插板法没学好,人家有要求:每个盘子里的数量不能一样
hearts 发表于 2022-6-17 15:26 没看见。 那就首先假设盒子都相同,然后再乘以P(5,5)就好。
cloudcloud 发表于 2022-06-17 14:41 还要排除两个盒子数量相同 另两个盒子数量也相同的情况 太麻烦了 还不如枚举…
hearts 发表于 2022-06-17 15:26 本帖最后由 hearts 于 2022-6-17 15:49 编辑 没看见。 那就首先假设盒子都相同,然后再乘以P(5,5)就好。 20个数很容易数吧。 20= 1+2+3+4+10 1+2+3+5+9 1+2+3+6+8 1+2+4+5+8 1+2+4+6+7 1+3+4+5+7 2+3+4+5+6 就7个,7*P(5,5) 要是非要找通用公式,我刚才搜了一下,其实研究还是很充分的,没有通用公式,只能提供generating function。 但有一点能简化。 https://www.mathpages.com/home/kmath556/kmath556.htm 指出,把(n+k(k+1)/2)分成k个不同的数相加,和 把n分成小于等于k个数相加是相同的。 例如n=5,k=5,把(5+5*6/2)=20,分成k=5个不同的数相加,(就是本题) 和把n=5分成小于等于k=5个数相加,是一样的。 就是5= 5 1+4 2+3 1+1+3 1+2+2 1+1+1+2 1+1+1+1+1 7个相同。 注意把n个数分成k数相加的(k<=n),也一样是没有通用解的。 https://www.whitman.edu/mathemat ... k/section03.03.html 但有一个递归解 把n分成几个整数相加(所有的可能), p(n)=p(n-1)+p(n-2)-p(n-5)-p(n-7)+p(n-12)+p(n-17)-........... 所以对于这个题一个一个数其实是唯一解法。 或者,先把本题 20个数分成5个不同的数, 转化为 把 5个数分成不同的数,然后通过递归算(这个比较特殊,因为本题正好能转,不是所有的都能转) p(0)=1 0=0 p(1)=1 1=1 p(2)=p(0)+p(1)=2 2=2、1+1 p(3)=p(2)+p(1)=3 3=3、1+2、1+1+1 p(4)=p(3)+p(2)=5 4=4、1+3 、2+2 、1+1+2、1+1+1+1 p(5)=p(4)+p(3)-p(0)=7 当然如果就想通过公式算,只能通过generating function,然后再算,n不大的时候,计算量比一个一个数应该是大不少。
本版积分规则 发表回复 回帖后跳转到最后一页
Archiver|手机版|小黑屋|千帆网 ( 沪ICP备15002998号-1 )上海千教教育科技有限公司,邮箱:admin@qianfanedu.cn 举报电话:54804512
沪公网安备 31010502004934号
GMT+8, 2025-2-23 17:05 , Processed in 0.120691 second(s), 18 queries .
Powered by Discuz! X3.4
© 2001-2013 Comsenz Inc.