博客
关于我
Milking Time
阅读量:206 次
发布时间:2019-02-28

本文共 1526 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要安排Bessie的工作时间,使得她能够在有限的N小时内最大化产奶量。每次完成一个任务后,Bessie需要休息R小时。我们需要选择这些任务的顺序,以便在总产奶量上取得最大收益。

方法思路

  • 问题分析

    • Bessie每完成一个任务需要休息R小时,因此每个任务实际上占用的时间是结束时间减去开始时间再加上R小时。
    • 我们需要找到一种任务顺序,使得在这N小时内的总产奶量最大化。
  • 预处理

    • 将每个任务的结束时间加上R小时,记录到数组中。
    • 按照任务的结束时间排序这些任务。
  • 动态规划

    • 使用数组f,其中f[i]表示前i小时的最大产奶量。
    • 对于每个小时i,初始情况下,f[i]等于f[i-1](没有选择任何任务)。
    • 检查是否有任务的结束时间等于i,如果有,则计算选择该任务的产奶量,并更新f[i]。
  • 状态转移

    • 对于每个小时i,检查所有结束时间等于i的任务,计算选择这些任务的最大产奶量,更新f[i]。
  • 解决代码

    def main():    import sys    input = sys.stdin.read    data = input().split()        idx = 0    N = int(data[idx])    idx += 1    M = int(data[idx])    idx += 1    R = int(data[idx])    idx += 1    a = []    for _ in range(M):        l = int(data[idx])        idx += 1        r = int(data[idx])        idx += 1        c = int(data[idx])        idx += 1        a.append((l, r, c))        for i in range(M):        a[i] = (a[i][0], a[i][1] + R, a[i][2])        a.sort(key=lambda x: x[1])        f = [0] * (N + R + 2)        for i in range(1, N + R + 2):        f[i] = f[i - 1]        while idx < M and a[idx][1] < i:            idx += 1        while idx < M and a[idx][1] == i:            l, r, c = a[idx]            if l <= i - 1:                if f[l] + c > f[i]:                    f[i] = f[l] + c            idx += 1        print(f[N])if __name__ == "__main__":    main()

    代码解释

  • 读取输入

    • 读取输入数据,解析出N、M、R以及每个任务的开始时间、结束时间和效率。
  • 预处理任务

    • 将每个任务的结束时间加上R小时,记录到数组中。
    • 按照任务的结束时间排序这些任务。
  • 动态规划数组初始化

    • 初始化f数组,f[i]表示前i小时的最大产奶量。
  • 计算最大产奶量

    • 对于每个小时i,初始情况下,f[i]等于f[i-1]。
    • 检查是否有任务的结束时间等于i,如果有,计算选择该任务的产奶量,并更新f[i]。
  • 通过这种方法,我们可以高效地找到在给定N小时内的最大产奶量。

    转载地址:http://mptn.baihongyu.com/

    你可能感兴趣的文章
    python语言:装饰器原理
    查看>>
    Python 交互式数据可视化详解
    查看>>
    python语言有哪些优点和缺点_Python有哪些优缺点,你了解吗?
    查看>>
    Python 从入门到精通:30天速成教程到底有多狠?你能坚持下来吗?
    查看>>
    Python 从数据库中存储和检索密码的最安全方法
    查看>>
    Python语言及其应用 - 知识点遍历
    查看>>
    Python 优化提速的 8 个小技巧
    查看>>
    Python 余弦相似度与皮尔逊相关系数 计算
    查看>>
    python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
    查看>>
    python 使用filetype校验文件
    查看>>
    Python 使用flush函数将缓冲区数据立即写磁盘
    查看>>
    python 使用in判断不准确,in不好使
    查看>>
    Python 使用pandas 进行查询和统计详解
    查看>>
    Redis 配置文件redis.conf详细解释
    查看>>
    python网络爬虫(2)——scrapy框架的基础使用
    查看>>
    python网络爬虫实例教程试读_Python网络爬虫实战教程(全套完整版) - 学途无忧网 - 做技术的王者 - Powered By EduSoho...
    查看>>
    Python 使用哈希函数用于加密
    查看>>
    Python 依赖管理的革新——Poetry 深度解析
    查看>>
    python 保留精度及增加去除数字的千位分隔符(金额化数字)
    查看>>
    python 倒计时 9,8,7,。。。。。。0
    查看>>