P8266 [USACO22OPEN] Photoshoot B 题解
思考
注意到限制了是偶数个前缀进行翻转
我们考虑相邻的两个捆绑在一起为一组.
每次操作等于对于这个前缀的每个组交换奇数上的位置和偶数上的位置.
如果一组内两个位置的类型相同,则你转不转无所谓.
否则,旋转一个组对于整个数列内,偶数为\(G\)的位置的代价为\(+1\)或\(-1\)
我们先考虑最大的偶数个是多少?
显然,我们总可以使得所有可以贡献的组的贡献为正.
而且调整方法非常简单,以下为例子
\(-1,-1,1,-1,1\)
\(1,1,1,-1,1\)
\(-1,-1,-1,-1,1\)
\(1,1,1,1,1\)
我们考虑如何计算代价.
很显然,我们可以把连续的\(-1,+1\)压缩为一个,
然后这个就可以动态规划解决了,非常简单.
收获
-
首先一个常见的trick,就是相连的捆绑.
-
其次,我们可以先玩玩数据,这非常重要
-
当操作会改变对象之间的关系、产生很强的后效性时,不一定要研究“操作之后会发生什么”,可以尝试寻找一种始终最优的规范化操作方案,直接规避这些变化。

浙公网安备 33010602011771号