P4765 CERC2014 The Imp

设我们打算买的 K+1 个物品为 p1,p2,,pK+1
则依此顺序购买的收益为 min(vp1cp1,vp2cp1cp2,,vpK+1i=1K+1cpi)
从邻项交换的角度,考虑我们按哪种顺序去购买这 K+1 个物品收益最大。
任取相邻两项 (vpx,cpx),(vpy,cpy),其中 x 排在 y 前面。
此时,若调整 xy 的顺序,对前面和后面的贡献都没有影响,我们只要使这两项的贡献尽量大。
min(vpxcpx,vpycpxcpy)<min(vpycpy,vpxcpxcpy) 时需要交换。

依此对所有商品排序。此时只要考虑依次选取,从而收益也方便计算。不妨考虑dp
先考虑 dpi,j 表示前 i 件商品打算买 j 件的最大收益 (jK+1)
发现转移时不好计算当前收益。但想到如果倒着计算(就是每次在购买列表的最前面加一件物品),所有项只需减去当前的 c
dpi,j 表示第 in 件商品打算买 j 件的最大收益 (jK+1)
转移为 dpi,j=max(dpi+1,j,min(dpi+1,j1ci,vici))
最终答案为 max(0,dp1,K+1),因为你的计划必须包含 K+1 件物品,即使最终你没有买到那么多(空盒子?)。
其余需处理的事情略去。时间复杂度 O(nK+nlogn),空间复杂度 O(nK)

注:标红部分疑似有误。

posted @   studentDL  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示