P8321 『JROI-4』沈阳大街 2
不妨把 \(B\) 也由大到小排序。
先考虑怎么推一推式子。我们要求的是
\[\sum_{\pi}\prod_{i=1}^n \min(A_i,B_{\pi_i})=\sum_{\pi}\prod_{i=1}^n \min(A_{r_i},B_i)
\]
然后我们可以把 \(B_n\) 提出来,考虑能否进一步变化,发现并不可以。然而我们能用的只有乘法分配律,好像没办法继续了。
观察到我们大概需要一个 \(O(n^2)\) 的算法。
考虑使用乘法交换律,交换每一项乘式内的 \(\min(A_i,B_{\pi_i})\),使得它们由大到小排序。
考虑一个增量生成的过程,一个容易想到的方式是对于每一个 \(A_i\) 考虑谁跟它匹配。
发现这样不好做,考虑交换枚举顺序,按照容易计算贡献的方式枚举。
考虑把 \(A_i,B_i\) 合并起来排序,按照这个顺序 dp,设 \(dp_{i,j}\) 表示前 \(i\) 个已经配对 \(j\) 对。
\[dp_{i,j}=dp_{i-1,j}+dp_{i-1,j-1}\times v_i \times cnt_i
\]