CF2023D 做题记录
CF2023D 做题记录
考虑 01 背包。让 \(w_i\) 为体积,\(p_i\) 为权值,现在要让权值的乘积最大。答案即为所有 \(w \times f_w\) 的最大值。
但这么做复杂度是 \(O(n \times \sum w_i)\) 的过不了。
我们现在想缩小 \(n\) 和 \(\sum w_i\) 的枚举范围,考虑将 \((p_i,w_i)\) 按照 \(p_i\) 分组。
当两个 \(p_i\) 相同时,贪心地想取 \(w_i\) 较大的更好。
因此对于相同的 \(p_i\),按照 \(w_i\) 从大到小排序。
设 \(p_i=p\) 最先取,取了前 \(x\) 个,其中的 \(w_i\) 和为 \(s\),最小值为 \(y\),且这么取是最优的。
最优代表删除任何一个数都不会更优,而显然你删除最小值是最优的。于是有:
我们其实想要的是一个 \(x\) 的上界。考虑 \(s-y \ge \dfrac{x-1}{x} s\)。原理是最小值一定不大于平均数。
当 \(p=100\) 时候这个式子会假掉。但这时它对于 \(p\) 的积不会产生影响,无脑全取即可,特判掉。
写个程序计算可知全部可能被取的数的个数 \(m=\sum\limits_{p=1}^{99} \lfloor\dfrac{100}{100-p}\rfloor = 481\)
但是这么做还是会超时。考虑缩小 \(\sum w_i\) 的值。
设选出的一组最优解中,\(s=\sum w_i\),\(P=\prod \dfrac{p_i}{100}\)。且其中一个数为 \((p,w)\)。
从中删除一个一定不优,于是:
题目中有条件 \(wp \le 2\times 10^5\)。
和一定差大积小,令 \(p=1\),则上述式子取到最大,大约是 \(2 \times 10^5\) 左右。

浙公网安备 33010602011771号