当前位置: 首页 > news >正文

2026蓝桥杯 Python A 购电优化(模拟+贪心 好题)

P16289

// 若电池容量为0,显然只能现买现用
// 若电池容量无限大,显然每次都用前缀最小值来买
// 那么当电池容量为k时,电池中的电量应当存储价格最便宜的k个单位(每个单位电量对应的c[i]越小越好)
// 考虑用set动态维护这k个单位的电量
// 每来到一个新的任务 (c[i], w[i]) 时:
// 1. 首先需要在这里购买电量(暂时存到电池中,容量超过k也无所谓;为了覆盖到所有情况,最多需要买 k + w[i] 单位电量(即此时c[i]特别小,需要先完成现在的消耗任务,再用最多k个单位电量补满电池))
// 2. 然后贪心地用当前电池里最便宜的 w[i] 个单位电量去完成当前消耗电量任务;
// 3. 完成后电池容量可能会超过k,为了让总花费最小,显然我们应当贪心地删除 set 里面最贵的电量,直到电池内总电量剩余恰好k个单位
// 然后执行后续任务,并按照上述过程继续贪心
// 复杂度分析:每次来到一个任务,set 只会添加一个 (c[i], k + w[i]),即恰好添加 n 个元素
//            而在进行购买电量引起的删除操作时,只会在删除若干个元素后,最多进行一次额外插入(相当于修改最后一个被删除的元素)
//            处理超过容量的电池电量时也是同理
//            因此总插入次数不超过 3n(每次执行任务最多进行3次插入操作),删除也只会从这 3n 个插入的元素中删
//            故总复杂度 O(nlogn)
void solve()
{int n, k;cin >> n >> k;vector<int> w(n + 1), c(n + 1);LL res = 0;for(int i = 1; i <= n; i ++){cin >> w[i];}for(int i = 1; i <= n; i ++){cin >> c[i];res += 1ll * w[i] * c[i];}if(k == 0){print(res);return;}LL ans = 0;LL sum = 0; // 当前 set 内的总电量有多少单位multiset<pair<int,LL>> ms; // {电池单位价格,电池容量大小}for(int i = 1; i <= n; i ++){// 先购买 k + w[i] 个单位当前电池电量ms.insert({c[i], k + w[i]});sum += k + w[i];// 用当前 set 里最便宜的 w[i] 个单位电量去完成当前的消耗电量任务int now = w[i];while(1){assert(!ms.empty());auto [cost, rest] = *ms.begin();if(rest >= now){ans += 1ll * cost * now;ms.erase(ms.begin());if(rest > now) ms.insert({cost, rest - now});sum -= now;now = 0;break;}else{ans += 1ll * cost * rest;now -= rest;sum -= rest;ms.erase(ms.begin());}} assert(now == 0);// 删除容量超过k的部分,直到电池内剩余k个最便宜的单位电量while(1){assert(!ms.empty());auto [cost, rest] = *(--ms.end());if(rest >= sum - k){ms.erase(--ms.end());if(rest > sum - k) ms.insert({cost, rest - (sum - k)});sum = k;break;}else{sum -= rest;ms.erase(--ms.end());}}assert(sum == k);}print(ans);
}
http://www.jsqmd.com/news/635768/

相关文章:

  • 鸿蒙HarmonyOS模块化开发实战:手把手教你使用HSP和HAR共享代码
  • 高中化学里面诱导力,色散力,取向力以及范德华力的区别联系
  • 2026.4.11 蓝桥杯软件类C/C++ G组山东省赛 小记
  • ESP32-S3单片机入门:点灯
  • AlienFX-Tools终极指南:释放Alienware设备的全部潜能
  • 轻量化文件批量重命名工具——太极重命名的设计理念与实践
  • BEAST 2 贝叶斯进化分析:从新手到专家的完整指南
  • 全网最细!OpenClaw 工具系统深度解析:从原子能力到企业级安全,AI 智能体的“万能手脚“完全指南
  • Autoware.universe实车部署实战:从传感器配置到调试全流程
  • 96.1亿元!数字体验编排(DXO)平台软件市场规模揭晓,数字化转型赛道迎新风口
  • VMPDump深度解析:动态VMP脱壳与导入表修复实战指南
  • 2026年宁夏舒心游国际旅行社有限公司官方联系方式公示,宁夏一手地接服务合作便捷入口 - 第三方测评
  • 太极重命名软件的功能架构与技术实现分析
  • 从Verilog到HLS:FPGA实现CNN的并行计算架构与设计权衡
  • Get笔记API + Python脚本:如何自动化处理2W+公众号文章,实现批量摘要与导出
  • 别再让机械臂乱动了!详解ROS2中Gazebo与MoveIt2的控制器配置与通信原理
  • Golang怎么写博客系统后端_Golang博客系统教程【进阶】
  • OpenClaw模型配置规则及说明
  • 2026年主轴维修厂家推荐榜单:高端主轴维修、CNC电主轴维修、加工中心电主轴维修、数控机床主轴维修、高速电主轴维修厂家选择指南 - 海棠依旧大
  • 01_TIM定时器用于周期任务(100us)
  • 告别Keil单调调试:用Ozone + J-Link可视化你的FreeRTOS任务状态(附工程配置避坑点)
  • 【软件架构四大范式】
  • C# NetTopologySuite+ProjNet 实现复杂几何图形坐标转换实战
  • 结构化表达:让你的周报、方案和总结脱颖而出
  • Claude Code 工作流工具怎么选?OpenSpec、GSD、Superpowers、Task Master、Backlog.md、Spec Kit 一次讲清
  • 扩散模型如何革新遥感?从HSIGene看高光谱图像生成的三大应用场景
  • 【EasyExcel进阶】自定义单元格样式:基于业务规则动态设置行背景色实战
  • LED Gamma校正算法:从原理到Python实现
  • PyFluent终极指南:5步快速掌握Python驱动CFD仿真的完整教程
  • STM32F4实战:如何把PA15从JTAG引脚变身为SPI3_NSS(附完整代码)