博客
关于我
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 和Java 哪个更适合做自动化测试?
    查看>>
    python 图片转ico
    查看>>
    python 图片转文字、语音转文字、文字转语音保存音频并朗读
    查看>>
    python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
    查看>>
    Python 在并行进程之间共享字典
    查看>>
    Python 垃圾收集器文档
    查看>>
    python 基于 wordcloud + jieba + matplotlib 生成词云
    查看>>
    python 基于detectron或mask_rcnn的mask遮罩区域进行图片截取
    查看>>
    Python编程:Tkinter图形界面设计(2)
    查看>>
    Python 基础 - Day 5 Learning Note - 模块 之 标准库:time (1)
    查看>>
    Python 基础一
    查看>>
    Python 基础知识点整理与分享,期盼你的交流!
    查看>>
    python 基础第七篇
    查看>>
    Python编程:Tkinter图形界面设计(1)
    查看>>
    Python 基础语法:None
    查看>>
    Python 基础语法:基本数据类型(一)
    查看>>
    python编程读取写入excel_Python读取txt内容写入xls格式excel中的方法
    查看>>
    Python 基础语法:基本数据类型(字典)
    查看>>
    Python 基础语法:基本数据类型(字符串)
    查看>>
    Python 基础语法:基本数据类型(集合)
    查看>>