获取题库不需要订阅专栏,可直接私信我进入CSDN领军人物top1博主的华为OD交流圈观看完整题库、最新面试实况、考试报告等内容以及大佬一对一答疑。
题目描述
中秋节,公司分月饼,m 个员工,买了 n 个月饼,m ≤ n,每个员工至少分 1 个月饼,但可以分多个,
- 单人分到最多月饼的个数是 Max1 ,单人分到第二多月饼个数是 Max2 ,Max1 - Max2 ≤ 3 ,
- 单人分到第 n - 1 多月饼个数是 Max(n-1),单人分到第n多月饼个数是 Max(n) ,Max(n-1) – Max(n) ≤ 3,
问有多少种分月饼的方法?
输入描述
每一行输入m n,表示m个员工,n个月饼,m ≤ n
输出描述
输出有多少种月饼分法
题目解析
这个问题可以通过动态规划解决。定义 dp[i][j] 表示有 i 个员工分配 j 个月饼的方法数。状态转移时,需要考虑分配给最后一个员工的月饼数量从 1 到 min(j, i) 的所有可能,同时要满足题目中关于月饼数量差值的限制。
由于 Max1 - Max2 ≤ 3 和 Max(n-1) - Max(n) ≤ 3 的条件,我们需要在计算过程中确保不会违反这些条件。这要求我们在动态规划的转移过程中,对每个分配情况进行检查,确保不会出现两个相邻员工分得的月饼数量之差超过3的情况。
Java算法源码