python 分月饼

算法:回溯+剪枝
‘’’
分月饼
中秋节,公司分月饼,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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值