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

    你可能感兴趣的文章
    MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
    查看>>
    Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
    查看>>
    mysql_real_connect 参数注意
    查看>>
    mysql_secure_installation初始化数据库报Access denied
    查看>>
    MySQL_西安11月销售昨日未上架的产品_20161212
    查看>>
    Mysql——深入浅出InnoDB底层原理
    查看>>
    MySQL“被动”性能优化汇总
    查看>>
    MySQL、HBase 和 Elasticsearch:特点与区别详解
    查看>>
    MySQL、Redis高频面试题汇总
    查看>>
    MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
    查看>>
    mysql一个字段为空时使用另一个字段排序
    查看>>
    MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
    查看>>
    MYSQL一直显示正在启动
    查看>>
    MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
    查看>>
    MySQL万字总结!超详细!
    查看>>
    Mysql下载以及安装(新手入门,超详细)
    查看>>
    MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
    查看>>
    MySQL不同字符集及排序规则详解:业务场景下的最佳选
    查看>>
    Mysql不同官方版本对比
    查看>>
    MySQL与Informix数据库中的同义表创建:深入解析与比较
    查看>>