【分月饼】

566 篇文章

已下架不支持订阅

472 篇文章

已下架不支持订阅

题目解析

本题类似于整数划分问题,即将一个正整数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员工,因

已下架不支持订阅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿甘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值