题目描述
Bessie 有一行 ()块瓷砖,依次具有丑陋度 ()。其中 ()块瓷砖卡住了;具体地,索引为 ()的瓷砖。
Bessie 想要最小化瓷砖的总丑陋度,其中总丑陋度定义为每对相邻瓷砖的最大丑陋度之和;即 。她可以任意次执行以下操作:选择两块均未卡住的瓷砖,并交换它们。
求 Bessie 以最优方案执行操作可以达到的最小总丑陋度。
输入格式
输入的第一行包含 和 。
第二行包含 。
第三行包含 个索引 。
输出格式
输出最小可能的总丑陋度。
输入输出样例 #1
输入 #1
输出 #1
输入输出样例 #2
输入 #2
输出 #2
输入输出样例 #3
输入 #3
输出 #3
说明/提示
样例解释 1
Bessie 可以交换第二块和第三块瓷砖,使得 ,达到总丑陋度 。或者,她也可以交换第一块和第二块瓷砖,使得 ,同样达到总丑陋度 。
样例解释 2
瓷砖的初始总丑陋度为 。Bessie 只允许交换第一块和第三块瓷砖,这并不能使她能够减少总丑陋度。
测试点性质
- 测试点 :。
- 测试点 :。
- 测试点 :。
- 测试点 :没有额外限制。
题解
性质分析
考虑到未固定的数可以任意交换,本题可转化为: 个数被固定在数列中,将剩余 个数放到其余位置,使得总丑陋值最小。
丑陋值可表示为:
其中 是固定值,因此题目目标是最小化 。为了便于处理,我们在数列中加入 。
个被固定的数将原序列分为至多 段,我们分别处理每一段 ,其中 且 已经被固定。不妨设 。
性质一: 序列应该单增,这样使得 段的总贡献最小(如果 ,这里应该是单减)。
可以用调整法证明这一结论。
在性质一的安排下, 的总贡献为 。该贡献仅与 有关,与其他位置的值无关。显然这两个数分别是区间内的最大值和最小值,我们用 分别表示第 个区间 (不含 )内的最大值和最小值。
注意到关于 的贡献为 随着 减小单减,关于 的贡献 随着 增大单减。
因此可以通过调整法证明每个区间内的值域区间 要么相离要么包含,否则可以把相交区间切成两部分,使得 变小 变大来得到一个更不差的总丑陋值。
DP 方案
填数方案:从小到大考虑每个数,要么它作为某一段的左边界,要么它填入目前左边界最大的没填满的段(若存在多个未填满的段,则这些区间是包含关系,必然要让左边界最大的段右边界最小),此时若将这个段填满了就直接作为这个段右边界。
我们用区间 DP 实现这个填数过程。令 表示下标为 的数已经填满集合为 的段的最小贡献。
由上面的填数过程可知,我们不会在内部的小段留一些数给外面更大的段。(调整法也可以证明)
因此,设 表示集合为 的段的长度之和,满足 最小且 最小的 一定满足 。
考虑三种状态转移:
- 目前左边/右边的数留给下一个包住它的段,,这部分转移是 的,复杂度等于状态数 。
- 把两端拼起来,考虑枚举子集, 可以从 转移过来,复杂度为 。
- 用一个大段包住中间的小段, 可以从 ,其中 表示第 段最小值为 最大值为 的贡献,这部分由于用大段包住小段的时候一定满足 ,所以复杂度为 。
最后复杂度为 ,瓶颈为第二种转移。