题解:P14636 [NOIP2025] 清仓甩卖 / sale

· · 题解

看到难度是黑还以为自己场切黑题了赶紧来写题解结果还没写完就降紫了/fn

先考虑怎么样设置清仓价会导致小 R 无法获得最大价值。

如果没有任何一颗糖果被跳过,买的就是性价比最大的那些糖果,显然一定可以获得最大价值。

如果有糖果被跳过了,那么这肯定是一颗 w_i=2 的糖果,且小 R 考虑到这颗糖果时刚好只剩一块钱,此时要想要获得一个更优解唯一的方法只有放弃掉之前最后一个被考虑的即原价最低w_i=1 的糖果并换成当前的这块糖果。

于是先枚举这两块糖果,设为糖果 i,jw_i=1,w_j=2,由于糖果 i 比糖果 j 先考虑到即性价比更高,那么一定有 a_i>2a_j

接下来考虑计算钦定了这两块糖果之后剩下的糖果有多少种设置剩下的清仓价的方法可以使小 R 取不到最优解,有如下的限制:

可以发现这样就考虑完了所有糖果,这样就算出来了小 R 取不到最优解的情况,用 2^n 减去即可。

实现方面,将所有糖果按原价排序后枚举 i,j,第一条限制的左端点是递增的因此维护一个指针在序列上滑动即可,复杂度 O(n^2)