P4765 CERC2014 The Imp
设我们打算买的 \(K+1\) 个物品为 \(p_1,p_2,\cdots,p_{K+1}\)。
则依此顺序购买的收益为 \(min(v_{p_1}-c_{p_1},v_{p_2}-c_{p_1}-c_{p_2},\cdots,v_{p_{K+1}}-\sum_{i=1}^{K+1}c_{p_i})\)。
从邻项交换的角度,考虑我们按哪种顺序去购买这 \(K+1\) 个物品收益最大。
任取相邻两项 \((v_{p_x},c_{p_x}),(v_{p_y},c_{p_y})\),其中 \(x\) 排在 \(y\) 前面。
此时,若调整 \(x\) 和 \(y\) 的顺序,对前面和后面的贡献都没有影响,我们只要使这两项的贡献尽量大。
则 \(min(v_{p_x}-c_{p_x},v_{p_y}-c_{p_x}-c_{p_y})<min(v_{p_y}-c_{p_y},v_{p_x}-c_{p_x}-c_{p_y})\) 时需要交换。
依此对所有商品排序。此时只要考虑依次选取,从而收益也方便计算。不妨考虑dp。
先考虑 \(dp_{i,j}\) 表示前 \(i\) 件商品打算买 \(j\) 件的最大收益 \((j\le K+1)\)。
发现转移时不好计算当前收益。但想到如果倒着计算(就是每次在购买列表的最前面加一件物品),所有项只需减去当前的 \(c\)。
设 \(dp_{i,j}\) 表示第 \(i-n\) 件商品打算买 \(j\) 件的最大收益 \((j\le K+1)\)。
转移为 \(dp_{i,j}=max(dp_{i+1,j},min(dp_{i+1,j-1}-c_i,v_i-c_i))\)。
最终答案为 \(max(0,dp_{1,K+1})\),因为你的计划必须包含 \(K+1\) 件物品,即使最终你没有买到那么多(空盒子?)。
其余需处理的事情略去。时间复杂度 \(O(nK+nlogn)\),空间复杂度 \(O(nK)\)。
注:标红部分疑似有误。

浙公网安备 33010602011771号