算法:回溯+剪枝
‘’’
分月饼
中秋节,公司分月饼,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
输出描述
输出有多少种月饼分法’‘’
def fenyuebing(m,n):
def backtracing(tempm,tempn):
# print(before,ans)
if tempm==1 and 0<=tempn-before[-1]<=3:
ans.append(ans[-1] +1)
if tempm>tempn or tempn<1 or tempm==1:
return
for i in range(1,tempn+1):
if i-before[-1]>3 and before[-1]!=0:
break
if i<before[-1]:
continue
before.append(i)
backtracing(tempm-1,tempn-before[-1])
before.pop()
ans = [0]
before = [0]
backtracing(m,n)
return ans[-1]
print(fenyuebing(3,4))