题目解析
本题类似于整数划分问题,即将一个正整数n,分解为m个正整数的方案数。
这类问题一般不会有太大的数量级,比如将10000分解为10个整数,那方案数就太多了。
本题给了一个限制条件,那就是,如果将分解后的m个正整数升序的话,相邻元素之间的差值不能超过3。
另外,分解方案不在意m个正整数的顺序,比如 1 2 1 和 1 1 2算一种方案。
我这里考虑使用分治递归求解。
分治递归可以想象成一棵树,这颗树有m层。
第0层相当于序号0个员工,该层有多个节点,每个节点的值即为序号0个员工可能分得的月饼数量。
- 题目说,每个员工至少分得1个月饼,因此序号0个员工分得月饼数至少为1。
- 为了保证不产生重复方案,因此我们默认当前求解的升序的m个正整数序列,因此序号0个员工分得的月饼数不能超过均值,即 n / m,因为一旦序号0个员工分得的月饼超过均值,则其后面的员工必然会有分得小于均值月饼数的情况。
因此第0个员工分得的月饼数范围是 1 ~ n / m
接下来是第1层,相当于序号1员工,该员工分得的月饼数取决于上一层的员工:
- 为了保证升序,序号1员工分得的月饼最少数量即序号0员工分得的月饼数量
- 同时,题目限定相邻员工之间,月饼数差距不能超过3,因此序号1员工最多分得的月饼数量 = 序号0员工分得月饼数量 + 3
- 另外为了保证后面员工分得月饼数一定不小于序号1员工,因