si-shi-qi-a
四十七(A)
由于 \(x\) 严格递增(互不相同),考虑根号分治,设定阈值 \(B\)。
对于 \(x<B\) 的部分,直接做背包,求出 \(f_i\) 表示体积 \(i\) 能获得的最大价值。
转移一个物品进背包是 \(\Theta(k)\) 的,最多 \(\Theta(B)\) 个物品,复杂度 \(\Theta(kB)\)。
对于 \(x>B\) 的部分,考虑到这时候价值比较小。转置一下背包,考虑求出 \(g_i\) 表示获得价值 \(i\) 最少要多少体积。
因为总价值小于 \(\frac kB\)(乘上 \(x\) 要小于 \(k\),而 \(x>B\)),所以转移一个物品是 \(\Theta(\frac kB)\) 的。这部分复杂度就是 \(\Theta(\frac{k^2}B)\)。
最后将 \(f,g\) 合并即可,这样我们在根号复杂度内解决了问题。
至于删除操作可以时光倒流,第一部分的加入是均摊的,第二部分加入是每次根号的。
但是还是无法通过。考虑优化第二部分的物品个数。注意到对于 \(v\) 相同的物品,肯定优先拿 \(x\) 小的。
如果对于某个 \(v\) 拿了超过 \(\frac k{vB}\) 个,那么体积超过 \(\frac k{vB}\times xv=\frac{kx}B\),由于 \(x>B\),体积大于 \(k\)。
所以对于 \(v\) 相同的物品只需要保留 \(x\) 前 \(\frac k{vB}\) 小的,剩下的永远也不会选到。
现在物品总数就是 \(\sum_{v=1}^{k/B}\frac k{vB}=\Theta(\frac kB\log k)\)。这一部分复杂度降到 \(\Theta(\frac{k^2}{B^2}\log k)\)。
总复杂度为 \(\Theta(kB+\frac{k^2}{B^2}\log k)\),取 \(B=\Theta( (k\log k)^{\frac13})\) 得复杂度 \(\Theta(k^{\frac43}\log^{\frac13}k)\)。

浙公网安备 33010602011771号