Python-67: 蛋糕工厂产能问题

问题描述

小明的蛋糕工厂每天可以生产的蛋糕数量是由工厂中的机器和工人的数量决定的,即 ( m \times w )。现在他收到了一个大订单,需要尽快生产出 ( n ) 个蛋糕。为了提升生产速度,小明可以使用每天生产的蛋糕去购买额外的机器或工人,每台机器或每个工人的成本是 ( p ) 个蛋糕。

例如,如果工厂起始时有 1 台机器和 2 个工人,每次扩大产能的成本是 1 个蛋糕,为了生产 60 个蛋糕,小明可以这样操作:

  • 第一天:生产 2 个蛋糕,买入 2 台机器(总机器数变为 3)。
  • 第二天:生产 6 个蛋糕,买入 3 台机器,3 个工人(机器数 6,工人数 5)。
  • 第三天:生产 30 个蛋糕。
  • 第四天:再生产 30 个蛋糕,完成订单。

你的任务是帮助小明计算最快多少天能完成订单。

代码

def solution(m, w, p, n):

    # Please write your code here

    passes = 0

    candy = 0

    run = float('inf')

    while candy < n:

        if m > float('inf') / w:

            step = 0

        else:

            step = (p - candy) // (m * w)

        if step <= 0:

            mw = candy // p

            if m >= w + mw:

                w += mw

            elif w >= m + mw:

                m += mw

            else:

                total = m + w + mw

                m = total // 2

                w = total - m

            candy %= p

            step = 1

        passes += step

        if step * m > float('inf') / w:

            candy = float('inf')

        else:

            candy += step * m * w

            run = min(run, passes + ((n - candy + m * w - 1) // (m * w)))

    return min(passes, run)

if __name__ == "__main__":

    #  You can add more test cases here

    print(solution(3, 1, 2, 12) == 3 )

    print(solution(10, 5, 30, 500) == 8 )

    print(solution(3, 5, 30, 320) == 14 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

完成大叔

你的鼓励是创作的最大动力。

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

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

打赏作者

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

抵扣说明:

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

余额充值