博客
关于我
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:如何检测串行 COM 上的设备名称/ID
    查看>>
    Python:如何模拟 datetime.utcnow()?
    查看>>
    Python:如果DataFrames之间的其他值匹配,则对DataFrame中的值求和
    查看>>
    Python:字典思维
    查看>>
    Python:将 HEX 字符串转换为字节
    查看>>
    Python:将列表与范围列表合并
    查看>>
    Python:将列表列表初始化为一定大小,
    查看>>
    Python:带有生成器的给定集合的幂集
    查看>>
    Python:按字符的位置拆分字符串
    查看>>
    Python:替换嵌套字典中的值
    查看>>
    Python:爬取数据出现response.status_code为403解决方法
    查看>>
    Python:爬取数据出现response.status_code为418解决方法
    查看>>
    Python:生成“元组集“;来自“元组列表“;不考虑顺序
    查看>>
    Python:生成具有趋势的随机时间序列数据(例如周期性、指数衰减等)
    查看>>
    Python:用渐进式数字重命名列表中的重复项而不对列表进行排序
    查看>>
    Python:矩形参数无效
    查看>>
    Python:语法进阶
    查看>>
    Python:调用复制函数时调用 Python 对象时超出了最大递归深度
    查看>>
    Python:这两个 import 语句有什么区别?
    查看>>
    Python:通过串口从 Velleman k8090 读取数据
    查看>>