I do hope for wo|

weirdoX

园龄:2年6个月粉丝:3关注:10

2024-10-22 08:45阅读: 6评论: 0推荐: 0

CF2023 - D. Many Games

先让 \(p\) 除以 \(100\),相当于给你两个数组 \(p, w\),然后要选择下标集合 \(S\),使得:

\(p\) 的积乘上 \(w\) 的和最大化。

注意到 \(p_i\) 是整数,并且 \(1\le p_i \le 100\)

那么容易想按照 \(p_i\) 分类。

然后 \(w_i\) 对于固定 \(p\) 一定是选择排序后的最大值后缀。

目前 \((P,Q)\),考虑选择 \(i\)

\[P\cdot W \to P\cdot p_i\times(W+w_i) \]

一定是后面的式子大于前面的式子才会选择,考虑做比例,那么不等式就是:

\[p_i+\frac{p_i\cdot w_i}{W} > 1\\ p_i\cdot w_i>(1-p_i)\cdot W \]

\(p\) 再乘回去:

\[p_i\cdot w_i>(100-p_i)\cdot W \]

题意有:\(p_i\cdot w_i \le 2\cdot 10^5\)

所以 \(W\) 最后不会很大,只会在 \(2\cdot 10^5\) 以内。

然后我们考虑按 \(p_i\) 分类。

假设选择了某个 \(p_i\) \(c\) 个,然后考虑选入的最小的值是 \(w_i\),考虑它不能删除时:

令:\(q_i=p_i/100\)

\[P\cdot q_i^c\times(W+w_i\cdot c+\Delta) > P\cdot q_i^{c-1}\times(W+w_i\cdot(c - 1) + \Delta)\\ q_i\cdot(W+w_i\cdot c+\Delta) > W+w_i\cdot(c - 1) + \Delta\\ (q_i-1)\cdot w_i\cdot c > (W + \Delta)(1-q_i) -w_i \]

然后只需要考虑 \(\Delta=0\) 的情况,限制更加严格:

\[(q_i-1)\cdot w_i\cdot c > W(1-q_i) -w_i\\ c < -\frac{W}{w_i}+\frac{1}{1-q_i}<\frac{100}{100-p_i} \]

也就是说对于一种概率 \(p_i\) 的物品,最多选择 \(\frac{100}{100-p_i}\)

\[\sum_{i=0}^{99}\frac{100}{100-p_i} = 100\ln 100\approx482 \]

然后对于概率等于 \(100\) 的物品无脑全部选入即可。

这里直接用 \(dp_{i,j}\) 表示考虑完前 \(i\) 物品,目前 \(W=j\) 时的最大的 \(P\)

最终复杂度就是 \(O(2\cdot 10^5\times 482)\)

代码

本文作者:weirdoX

本文链接:https://www.cnblogs.com/weirdoX/p/18491764

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   weirdoX  阅读(6)  评论(0编辑  收藏  举报
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示