博客
关于我
2020牛客暑期多校训练营(第八场)K.Kabaleo Lite(前缀和,高精)
阅读量:712 次
发布时间:2019-03-21

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

要解决这个问题,我们需要找到一个方法来确定能够容纳的最大顾客数以及在此情况下已能实现的最大利润。这个问题类似于寻找一个最优子序列,但我们需要确保菜品的编号是连续的。

思路分析

这个问题可以通过贪心算法来解决。我们的目标是找到一个长度为k的连续菜品序列,使得总利润最大化。虽然每位顾客至少要买一道菜,但为了利润最大化,我们可能需要跳过某些低利润的菜品。

  • 初始设定:我们首先设定第一道菜的利润总和。如果第一道菜的利润为负,仍然需要将其计入总利润,因为这是第一个顾客的利润。

  • 前缀和管理:我们需要维护前缀和的最小值。这是因为,如果某个前缀比前面更小,那么将更大的利润加到它上面可能比加到前面最小的前缀更优。这看起来有点复杂,但实际上,贪心策略告诉我们,只需要在每一步考虑当前的利润和前缀的最小值即可。

  • 动态更新:在每一步,我们计算当前利润,如果比之前的利润总和更大,我们就更新总利润,并记录最小前缀和。这样可以确保总利润最大化。

  • 最优解

    通过上述方法,我们可以逐步计算前缀和,保持最小前缀和,并更新总利润。这种方法的时间复杂度是O(n),非常高效。

    代码实现

    t = int(input())for _ in range(t):    n = int(input())    a = list(map(int, input().split()))    b = list(map(int, input().split()))        if n == 0:        print("Case #0: 0 0")        continue        max_profit = a[0] * b[0]    min_prefix = b[0]    ans = a[0]        for i in range(1, n):        current = a[i] * b[i]        current_profit = current + max_profit        if current_profit > ans:            delta = current_profit - ans            max_profit = max_profit + delta * min_prefix            ans = current_profit        elif current_profit > max_profit:            max_profit = current_profit        min_prefix = min(min_prefix, b[i])        print(f"Case #{_+1}: {b[0]} {max_profit}")

    结果展示

    该代码逐个处理每道菜,计算当前的利润,并更新总利润和前缀和的最小值。这样可以确保在所有可能的情况下,找到利润最大的连续菜品组合。

    每次处理一道菜,计算当前利润,如果比之前的总利润大,则更新总利润;如果不大,则更新前缀和的最小值。这种方法确保了在有限的时间内找到了最优解。

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

    你可能感兴趣的文章
    MySQL 存储引擎
    查看>>
    mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
    查看>>
    MySQL 存储过程参数:in、out、inout
    查看>>
    mysql 存储过程每隔一段时间执行一次
    查看>>
    mysql 存在update不存在insert
    查看>>
    Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
    查看>>
    Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
    查看>>
    Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
    查看>>
    Mysql 学习总结(89)—— Mysql 库表容量统计
    查看>>
    mysql 实现主从复制/主从同步
    查看>>
    mysql 审核_审核MySQL数据库上的登录
    查看>>
    mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
    查看>>
    mysql 导入导出大文件
    查看>>
    mysql 将null转代为0
    查看>>
    mysql 常用
    查看>>
    MySQL 常用列类型
    查看>>
    mysql 常用命令
    查看>>
    Mysql 常见ALTER TABLE操作
    查看>>
    MySQL 常见的 9 种优化方法
    查看>>
    MySQL 常见的开放性问题
    查看>>