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

    你可能感兴趣的文章
    Oracle 9i数据库管理教程
    查看>>
    ORACLE Active dataguard 一个latch: row cache objects BUG
    查看>>
    oracle avg、count、max、min、sum、having、any、all、nvl的用法
    查看>>
    Oracle BEQ方式连接配置
    查看>>
    oracle Blob保存方式,oracle 存储过程操作blob
    查看>>
    Oracle BMW Racing sailing vessel帆船图
    查看>>
    ORACLE Bug 4431215 引发的血案—原因分析篇
    查看>>
    Oracle Business Intelligence Downloads
    查看>>
    Oracle cmd乱码
    查看>>
    Oracle Corp甲骨文公司推出Oracle NoSQL数据库2.0版
    查看>>
    【Docker知识】将环境变量传递到容器
    查看>>
    uniapp超全user-agent判断 包括微信开发工具 hbuilder mac windows 安卓ios端及本地识别
    查看>>
    Oracle DBA课程系列笔记(20)
    查看>>
    oracle dblink 创建使用 垮库转移数据
    查看>>
    oracle dblink结合同义词的用法 PLS-00352:无法访问另一数据库
    查看>>
    Oracle dbms_job.submit参数错误导致问题(ora-12011 无法执行1作业)
    查看>>
    oracle dg switchover,DG Switchover fails
    查看>>
    Oracle E-Business Suite软件 任意文件上传漏洞(CVE-2022-21587)
    查看>>
    Oracle EBS OPM 发放生产批
    查看>>
    Oracle EBS-SQL (BOM-15):检查多层BOM(含common BOM).sql
    查看>>