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

14 ~ 21/12/2025 做题记录

[CERC2014] The Imp

恶魔有 \(n\) 个物品,每个物品价值为 \(v_i\),购买需要 \(c_i\) 元。

恶魔至多可以使用 \(k\) 次魔法,你和恶魔轮流操作:

  • 你购买一个物品
  • 恶魔要么释放一次魔法销毁这个物品(继续游戏),要么让你拿走这个物品(然后强制结束游戏)

你和恶魔都会采用最优策略,恶魔的目标是最小化你的收益,求你的最大收益。

\(1 \le n,v_i,c_i \le 10^6\)\(0 \le k \le 9\)

Hard Ver. \(0 \le k \le n\)

先做简单版本的,考虑邻项交换,设我们策略里最后买的两个物品是 \(v_1,c_1\)\(v_2,c_2\)
\(1\)\(2\)\(S + \min(v_1 - c_1, v_2-c_1-c_2)\)
\(2\)\(1\)\(S + \min(v_2 - c_2, v_1-c_1-c_2)\)

不失一般性地设 \(v_1 \le v_2\),那么有 \(v_1-c_1-c_2 \le v_2-c_1-c_2 \le v_2 - c_2\)
同时还有 \(v_1-c_1-c_2 \le v_1 - c_1\),也就是说右下角那项总是最小的,选择先 \(1\)\(2\) 总是不劣的。

这个时候就能直接 \(\text{dp}\) 了,但是正着比较难推,考虑我们的结构一定是在前缀选了若干被炸,然后最后拿走了一个,所以倒着来更新。\(f_{i,k}\) 表示在后 \(i\) 个物品里选了一些,被恶魔炸了 \(k\) 次:

  • \(f_{i,0} = \max(v_i - c_i, \ f_{i+1, 0})\)
  • \(f_{i,k} = \max(f_{i+1,k}, \ \min(f_{i+1,k-1}-c_i, \ v_i - c_i)\)

答案是 \(f_{1,k}\),这样是 \(O(nk)\) 的。
这个题我是 23 年做的,最近发现有人发明了 \(0 \le k \le n\) 的 hard ver,看一下怎么做。。。

我擦,做法是二分答案以后,正着反悔贪心(原来 dp 不容易正着做是因为这个 ???)。
就是说如果可以按顺序选出 \(k + 1\) 个物品,满足每个物品的 \(v_i - c_i - S \ge ans\) 那么这个二分的答案就合法,这里 \(S\) 是当前已选了的物品的 \(\sum c_i\)
这个条件是充要的,即恶魔没有办法在任何时候提前结束,使得你的答案小于 \(ans\),非常牛的转化。

如果 \(v_i - c_i - S\) 合法那么就直接贪心拿进来,然后把 \(c_i\) 放到堆里等着反悔。
如果拿不进来,就去堆里找一个最小的 \(c' \lt c_i\) 替换前面选的决策,而因为 \(v_i \ge v'\) 所以这样替换一定是合法的。

这样就 \(O(n \log^2 n)\) 了,非常自然的做法,而且很符合直觉,非常牛。

http://www.jsqmd.com/news/87688/

相关文章:

  • 如何高效解决Python字节码反编译的版本兼容难题
  • 传统装机VS天喵智能装机:时间成本降低90%的奥秘
  • 快速验证:SSL证书问题的自动化测试沙盒
  • 28、Ubuntu 网络配置全攻略
  • 30、Ubuntu 网络配置与远程访问全攻略
  • 小白必看:3分钟学会安全关闭Windows Defender
  • Spring AI聊天记忆:告别对话失忆的智能解决方案
  • map遍历实战应用案例分享
  • 产品经理必备:用快马5分钟搞定页面原型居中布局
  • OpenHarmony环境搭建——03-DevEco Studio下载安装及其配置【2025】
  • 48小时开发日记:基于天喵API的极客定制装机方案
  • 32、深入理解 Bash 脚本中的输入读取、循环控制与数据处理
  • 34、深入探索Shell脚本的流程控制与位置参数
  • 18、Perl 循环结构与控制详解
  • 241MB重塑边缘AI:Gemma 3 270M如何开启终端智能新纪元
  • 35、流量控制与字符串数字处理:for 循环及参数扩展详解
  • GLM-4.6大模型:200K上下文窗口与智能体工具调用的技术革命
  • 19、Perl 数据输入输出与文件读写全解析
  • 零基础入门:5分钟学会使用腾讯元宝API
  • 36、编程中的运算符、数组及高精度计算
  • 20、Perl编程:文件操作、哈希介绍及操作指南
  • mlr3机器学习框架:新手必看3大核心问题解决方案
  • AutoGPT在碳排放计算工具开发中的自动化支持
  • 28、Linux 编程:从源码编译到脚本编写
  • 21、正则表达式入门与元字符详解
  • 1小时打造智能加载检测工具:快马原型开发实录
  • 29、脚本编写与项目构建全攻略
  • 22、Perl正则表达式与程序交互实用指南
  • 2025年度精选:本地高评价真空滚揉机厂家TOP10排行,市场上口碑好的滚揉机口碑推荐关键技术和产品信息全方位测评 - 品牌推荐师
  • Linux----mmap