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

CF2085D Serval and Kaitenzushi Buffet

题目链接

比较 mini 的模拟赛考到了,想了半小时 DP 终于在结束前 5min 成功想出正解但是并没有写完

解题思路

首先我们考虑什么时候可以拿取寿司。容易发现因为我们必须在 \(n\) 分钟结束时吃完所有拿取的寿司,那么最后 \(k\) 个寿司不能拿取;同时如果到目前的时间减去拿寿司所用时间小于等手里寿司的数量,此时也是不能拿取的。

然后我们发现如果我们直接用上面的条件进行正向枚举并判断是错误的,因为虽然总时间是够的,但是不能保证每个寿司在拿取后有充足的时间吃掉它。我们修改一下条件:拿取该寿司后的剩余时间减去拿取寿司的时间大于等于吃掉所有寿司的时间时可以拿取寿司。这样就很明显需要我们倒序枚举。

由于题目要求我们的美味值最大,我们在符合条件的范围内优先拿取寿司,当发现时间不够了就对比一下之前拿取的最小的美味度和现在的谁更大,我们丢掉更小的那个。这很显然就是反悔贪心啦。

整合一下思路。倒序枚举寿司盘 \(i(1 \leq i \le n - k)\),记录拿取次数 \(cnt\),开一个小根堆维护已经拿取的寿司,我们先拿取寿司,当 \((n - i + 1) - cnt \lt cnt \times k\) 时说明时间超限,此时我们对比堆顶和当前美味值,留下美味值更高的那个,统计答案即可。

关于一个实现细节

注意到在我贴的代码中并没有判断队列是否为空,因为此时有 \(cnt = 0\),所以肯定会被判断为时间充裕从而直接拿取寿司。换言之,当上面的判断成立时肯定有 \(cnt\) 不为 \(0\),那么队列也不为空,就不需要判断了。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;const int MN = 2e5 + 3;
int n, k, ans;
int d[MN];priority_queue<int, vector<int>, greater<int> > q;inline void fir() {while (!q.empty()) q.pop();ans = 0;
}
void solve() {cin >> n >> k;fir();for (int i = 1; i <= n; i++) cin >> d[i];int tmp = 0; // 拿取次数for (int i = n; i >= 1; i--) {if (i > n - k) continue;tmp++; // 先拿上if ((n - i + 1) - tmp < tmp * k) {int x = q.top();if (x < d[i]) {q.pop();q.push(d[i]);ans += d[i] - x;}tmp--; // 扔掉原来那个}else {q.push(d[i]);ans += d[i];}}cout << ans << "\n";
}signed main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int T;cin >> T;while (T--) solve();return 0;
}
http://www.jsqmd.com/news/33600/

相关文章:

  • STM32时钟学习11.6
  • 2025.11.6总结
  • 高级程序语言设计的四次作业
  • 11月6日
  • 2024 暑期模拟赛 #11
  • startctf环境变量注入及强网拟态smallcode特殊解法
  • Spring ApplicationEventPublisher 事件发布
  • NOIP模拟赛20251106 T4 CF1270H
  • 详细介绍:电阻的分类与应用
  • 题解:CF2121E Sponsor of Your Problems
  • wepoc Nuclei 漏洞扫描器图形界面工具
  • Python实现数据可视化用Matplotlib轻松创建专业级图表 - 指南
  • Python因果分析选哪个?六个贝叶斯推断库实测对比(含代码示例)
  • 题解:CF2121B Above the Clouds
  • 实用指南:学习日报 20251007|深度解析:基于 Guava LoadingCache 的优惠券模板缓存设计与实现
  • 选择 Tita 新绩效一体化的 5 大理由
  • NOIP模拟赛20251106 T3
  • 20251106周四日记
  • 学习:初学BP
  • 2025年上海防水补漏TOP5最新评测:从屋顶到地下室,全场景解决
  • 线段树维护区间历史信息和为例的复杂信息维护同标记下传设计技巧简记
  • 每日总结(三)
  • DFS 序
  • 重组蛋白纯化标签科普:从His到SUMO、Avi的全面解析
  • 2025.11.6
  • 飞牛nas播放卡顿的解决方案
  • 第三十五篇
  • 使用LLaMA Factory微调模型笔记
  • 25.11.6联考题解
  • Linux驱动学习(一)---Ubuntu-helloworld驱动编译