发现对于多出来的一个礼物的方案数其实和原问题是相同的(排n+1个然后只取前n个就好了),所以如果礼物多了就把总人数+1
思路一:考虑对于每一类依次分配,因为同种奖品视作相同,所以用组合数来放奖品,再根据乘法原理乘起来就是答案了(因为本质上小朋友的顺序也是无关的)
别忘了每放完一类之后要把这一类放的个数从总人数里减去
ans=C(n,a[1])*C(n-a[1],a[2])*C(n-a[1]-a[2],a[3])*...*C(n-a[1]-a[2]-...-a[n-1],a[n])
思路二:这可以看作是可重集合的排列问题(即求的是排列,但中间有不同元素视作同种的情况),有公式:
ans = n! / (a[1]! * a[2]! * ... * a[n]!)