P7962 NOIP2021 方差
首先观察什么样的序列是能操作得到的。
考虑差分数组(由于算的是方差,所以不含第一项)可以发现,这个操作相当于交换差分数组相邻两项。也就是说,要让差分数组重排之后方差最小。
考虑推方差的式子,写成 \(n\sum a_i^2-(\sum a_i)^2\) 的形式。
发现最小化这个东西不太可做,于是去找结论。
打表发现,最优的差分数组是单谷的。
事实上这个结论很符合感性理解:我们希望更多地数接近中间。
这样就可以 DP 了。对差分数组从小到大做,枚举当前数插到前面还是后面,由贡献的式子发现只需要记录当前原数组的和即可转移。
时间复杂度 \(O(n^2a)\),还过不去最后一档。
又发现最后一档值域很小,这时候差分数组只有 \(O(a)\) 个非 0 项,而 0 的贡献是好处理的,所以可以得到 \(O(na\min(n,a))\) 的做法,可以通过。
对于这道题,一个很重要的事情是算贡献尽可能对简洁的式子算。我最初尝试时把贡献拆到差分数组,导致转移巨大复杂,写了很久才调出来一部分。后来改成直接对原数组算贡献,转移就非常简洁了。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号