「解题报告」[省选联考 2022] 序列变换

我不是很能理解?

神奇贪心题。

括号序列考虑直接整树形结构,然后操作就是将一个子树内所有儿子放到另一颗子树里,并把这个点单独放到这个子树内,贡献为 \(x\) 乘终点子树权值加上 \(y\) 乘原子树权值。

\((x,y)\) 进行分类讨论:

  1. \(x=0, y=0\) 显然答案等于 \(0\)
  2. \(x=0, y=1\)
    相当于每次将一颗子树放进另一颗子树内,贡献为它自己,那么为了答案最小肯定每次选较小的,最后剩下最大值。
  3. \(x=1, y=1\)
    两个贡献都有,那么我们可以先将所有的放到最小值内,然后把最小值放到最大值内,显然这样答案最小。
  4. \(x=1, y=0\)
    我们可以对所有的操作的总贡献进行考虑,那么发现每个数至少会被贡献过一次,而只有最后留下的数没有被贡献过。我们肯定会想最后留下最大值。除此之外,我们每次进行操作和第三种情况一样。所以我们还想要最小值尽可能小。那么我们发现,我们每次就应该尽可能将最小值和最大值都下放下去。
    对于有多于两个儿子的情况,套用第三种情况的方法就可以将最大值和最小值都下放下去。而当恰好有两个儿子时,我们只能下放其中一个。实际上,由于我们得到的子树大小一定是先递增,当没有子树之后开始递减的,所以我们肯定会有一段连续的 \(2\),然后后面都是多于两种,然后 \(2, 1\)。假如前面的选择方案确定了,后面的部分是容易贪心的。而简单分析发现,前面连续的 \(2\) 中只有被下放的唯一一个数没有被贡献过,那么我们只需要选择这个下放的数即可。根据上面的结论,我们肯定是下放最大值或者最小值,两种情况取个 \(\min\) 即可。
posted @ 2023-02-08 21:41  APJifengc  阅读(37)  评论(0编辑  收藏  举报