关注下方公众号,分享硬核知识
作者 | 小K
出品 | 公众号:小K算法 (ID:xiaok365)
01
故事起源
把M个苹果放在N个盘子里,允许有的盘子空着不放,那么总共有多少种不同的分法呢?
注:5,1,1和1,5,1是同一种分法,且1<=M,N<=10。
02
分析
2.1
苹果和盘子数量关系
苹果和盘子的数量没有说明大小关系,那就意味着有3种情况:
苹果比盘子多
苹果比盘子少
苹果和盘子数量相同
如果苹果多,那么一定会有盘子放超过一个苹果。如果盘子多,那么一定会有空盘子。如果相等,情况就不一定。
2.2
判断分法是否相同
所有的苹果是相同的,所有的盘子也是相同的,所以他们本身是无序的。
其实这个问题就是把M个苹果分成不超过N堆,总共有多少种分法。所以可先按每堆苹果数量排序,依次比较每一堆的苹果,如果所有堆都一样才是相同的分法。这也就意味着堆数肯定相同,然后排序后每一堆也相同,这样才算是相同的分法。
2.3
怎样才是不同分法
上面有了相同分法的判断,那取反后