si-shi-qi-a

四十七(A)

link

由于 \(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)\)

posted @ 2024-03-06 16:54  iorit  阅读(25)  评论(0)    收藏  举报