博客
关于我
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/

    你可能感兴趣的文章
    poj 3518 Prime Gap
    查看>>
    poj 3539 Elevator——同余类bfs
    查看>>
    Qt笔记——官方文档全局定义(三)Macros宏
    查看>>
    poj 3628 Bookshelf 2
    查看>>
    Qt笔记——官方文档全局定义(一)Types数据类型
    查看>>
    POJ 3670 DP LIS?
    查看>>
    POJ 3683 Priest John's Busiest Day (算竞进阶习题)
    查看>>
    POJ 3988 Selecting courses
    查看>>
    POJ 4020 NEERC John's inversion 贪心+归并求逆序对
    查看>>
    poj 4044 Score Sequence(暴力)
    查看>>
    POJ 基础数据结构
    查看>>
    POJ 题目3020 Antenna Placement(二分图)
    查看>>
    Poj(1797) Dijkstra对松弛条件的变形
    查看>>
    SpringBoot为什么不需要xml配置文件?
    查看>>
    POJ--2391--Ombrophobic Bovines【分割点+Floyd+Dinic优化+二分法答案】最大网络流量
    查看>>
    Qt笔记——SQLite初探QSqlDatabase QSqlQuery
    查看>>
    POJ-1163-The Triangle
    查看>>
    POJ-Fence Repair 哈夫曼树
    查看>>
    poj1061 - 同余方程,二元一次不定方程
    查看>>
    Qt笔记——SQLite再探
    查看>>