前两天好基友乘坐飞机去外地开年会,估计公司怕他们坐飞机实在太无聊,给他们搞了几道思考题。学习
在此我分享一下这道题目,以及答题思路。请先看题目内容。我直接上图片了,真的懒得打字呀~~~。优化
首先想到的是最直接的方法,找出各类分类,并累加各类分类模式的总数便可。spa
对于5种兵种,其形式可分为:图片
1 1 1 1 1 (阵容为同样一个) 对此形式总数为 1 ,从5个兵种中取出5个兵种, 组合数为C55.get
5 (阵容为同一兵种) 对此形式总数为5 ,从5个兵种中取出1个兵种,组合数为C51.it
2 2 1 (2个某兵种,2个某其余兵种,1个某其余兵种) 对此形式总数为 30,组合数为C51 * C41 * C31 / 2. (这里须要除以2 ,要去除221中22引发的重复)扩展
2 3 (请脑补)对此形式总数为20,组合数为C51 * C41.方法
1 4 (请脑补) 对此形式总数为20,组合数为C51 * C41.im
1 1 1 2 (请脑补)对此形式总数为20,组合数为C51 * C41 * C31 * C21 / 6.(这里须要除以6 ,要去除1112中111引发的重复)img
1 3 1 (请脑补)对此形式总数为30,组合数为C51 * C41 * C31 /2. (这里须要除以2 ,要去除131中1 1引发的重复)
一共为 1 + 5 + 30 + 30 + 20 + 20 + 20 = 126.
理论上此题目已经解决,可是尚未抽取出能够扩展的规律。也就是说还有找到解决问题的通式。进一步思考,想到了高中时学习的插空法。嗯,可用此法优化解题思路。
5个兵种槽位之间有4个空,插空即便将槽位进行分类。分类方式为插零个空C40(不分),插一个空C41(分红两部分),两个空C42(分红三部分),三个空C43(分红四部分),四个空C44(分红五部分)。
以分红两部分为例:
C41 * C52 :C52的意思为从5个兵种中任取2个兵种。将两个兵种分配到C41个槽模式下,总数为40.
最终总数为:
C40*C51 + C41*C52 + C42*C53 + C43*C54 + C44*C55 = 5 + 40 + 60 + 20 + 1 = 126 (1)
将组合式(1)进行以下变换获得组合式(2)
C44*C51 + C43*C52 + C42*C53 + C41*C54 + C40*C55 (2)
组合式(2)能够缩写为 并可改写为C95,9 为(5 - 1) + 5 也就是槽数 -1 + 兵种数,5 为 兵种数。
因此相似问题都可用一个组合数来表示。妙哉!~ 扩展公式为 n为兵种槽数,m为兵种数
最后,我基友告诉我其实我推出了一个 公式。。。。
还有一个巧妙的思路,能够直接得出C94的答案,在这里我就不介绍了,方法总比问题多,仅在这里抛砖引玉,若是错误请你们批评指正。谢谢。