尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

题解:P10647 [NordicOI 2023] Ice Cream Machines

题解:P10647 [NordicOI 2023] Ice Cream Machines
📅 发布时间:2026/7/6 6:51:22

前置知识

  • 二叉堆(优先队列)
  • 贪心算法。

题目大意

有n nn个顾客,k kk台机器,如果没有相应口味的机器,则需要清洗一台机器,在满足所有顾客的需求的条件下,最少清洗的次数。

思路

我们观察题面,通过关键字眼“最少”从而考虑贪心算法。
我们仔细思考,不难想出一种贪心策略:把影响力最小的口味的机器清洗。
这里的影响力指下一次出现最晚的口味,或者说是不会再出现。
那么我们就可以得到贪心算法的具体过程:

  1. 场上有相同口味机器,就不需用清洁,直接使用。
  2. 场上没有相同口味机器,但又有空余机器,直接将未使用机器清洗。
  3. 场上即没有相同口味机器,也没有空余机器,就将影响力最小的口味的机器清洗。

当然,在情况 3 的时候是不能通过枚举查找的,我们需要预处理每个顾客的口味下一次出现的时候,再使用大根堆维护情况 2 与 3 即可。
关于预处理,我们从后向前遍历,用一个nex数组储存每个口味下一次的出现时间,las数组则储存本次口味的时间,在往后遍历到相同口味,就设nex[i]=las[a[i]],las[a[i]]=i即可。特别地,如果las[a[i]]=0,也就代表当前是最后一次出现该口味,设nex[i]=INT_MAX。

贪心证明与时间复杂度

假设最优解不是清洗影响力最小的机器 A,而是选择了清洗在此之前出现的机器 B,那么中间再次需要使用机器 B 的时候,就需要二次清洗,所以最佳方案是删除 A。所以由此可证明贪心策略是正确的。

关于时间复杂度,我们可以发现,每一种情况的时间复杂度都是O ( log ⁡ n ) O(\log n)O(logn),那么遍历整个序列,时间复杂度就是O ( n log ⁡ n ) O(n \log n)O(nlogn)。

AC Code

#include<bits/stdc++.h>usingnamespacestd;intn,m,k;inta[500001];intnex[500001];intlas[500001];boolst[500001];priority_queue<pair<int,int>>q;intmain(){cin>>n>>m>>k;for(inti=1;i<=n;i++){cin>>a[i];}for(inti=n;i>=1;i--){if(las[a[i]]==0){nex[i]=INT_MAX;}else{nex[i]=las[a[i]];}las[a[i]]=i;}//预处理每个元素的下一个出现位置intsum=0;for(inti=1;i<=n;i++){if(st[a[i]]!=false){q.push({nex[i],a[i]});}elseif(k!=0){k--;sum++;st[a[i]]=true;q.push({nex[i],a[i]});//cout<<sum<<"\n";}else{while(!q.empty()&&st[q.top().second]==false){q.pop();}//将所有已经处理的那些指令去除st[q.top().second]=false;sum++;st[a[i]]=true;q.push({nex[i],a[i]});//将该机器的重要值加入//cout<<sum<<"\n";}}cout<<sum;}

相关新闻

  • 146、Prompt 优化迭代:用 DSPy 思路让 LLM 自己调自己的提示词
  • 如何免费解锁Wand游戏修改器完整功能:终极指南
  • 终极Alienware控制指南:如何用500KB轻量工具替代臃肿的AWCC

最新新闻

  • OpenCV 形态学梯度与顶帽运算:4步实现复杂背景下的文字边缘增强
  • GlobalMapper 20 配准实战:3个控制点快速叠加规划图,误差小于5像素
  • AI视频超分辨率技术:从512p到4K的实战指南
  • MC6470与PIC18LF25K50组合在运动控制中的应用
  • YOLO目标检测与卡尔曼滤波跟踪:从原理到实战的完整指南
  • AI大模型实战训练营:从开发到部署全解析

日新闻

  • AI智能体安全防护框架AgentGuard:从原理到实战部署指南
  • KMX63与PIC18F26K40硬件组合及低功耗设计实践
  • 基于YOLO13改进的门体检测模型:C3k2模块与PoolingFormer技术解析

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号