题目描述
题目描述
有 帧胶片,按照拍摄时间编号为 。起初每一帧单独成卷,因此共有 卷胶片,第 卷中只有编号为 的一帧。
如果一卷胶片中包含的帧编号恰好为 ,其中 ,则称这卷胶片覆盖编号区间 。卷内各帧的先后顺序不必按照编号递增。
任意时刻,若现有两卷胶片分别覆盖相邻的编号区间 和 ,其中 ,就可以选择以下一种方式将它们接成一卷:
- 正向接片:先放入覆盖 的整卷,再放入覆盖 的整卷,代价为 ;
- 倒序接片:先放入覆盖 的整卷,再放入覆盖 的整卷,代价为 。
被选择的两卷会被新卷替代,新卷覆盖 ,之后仍可参与接片。能否接片只由两卷覆盖的编号区间决定。每次接片都只改变两整卷的前后次序,不会翻转、打散或交错任意一卷内部的帧。
不断接片,直到只剩一卷胶片。给定 的一个排列 ,你需要使最后一卷中从前到后的帧编号依次为该排列。
请计算所有可行接片过程的最小总代价。如果无法得到给定排列,输出 。
输入格式
从文件 splice.in 中读取数据。
第一行输入一个整数 ,表示胶片帧数。
第二行输入 个整数 ,表示要求的最终帧序列。
输出格式
输出到文件 splice.out 中。
输出一个整数,表示得到给定排列所需的最小总代价;如果无法得到,输出 。
样例
1
1
0
4
2 1 4 3
2
4
3 4 1 2
1
4
2 4 1 3
-1
4
1 2 4 3
1
样例解释
样例 #1 中不需要进行接片。
样例 #2 中,可以分别用一次倒序接片得到 和 ,再正向接合这两卷,总代价为 。最终序列中 和 这两个相邻位置都是编号下降的位置,而每个这样的相邻位置都必须由一次倒序接片产生,因此总代价不能小于 。
样例 #3 中,先分别正向接出 和 ,再用一次倒序接片将后一卷放在前面,即可得到 。
样例 #4 中,考虑最后一次接片。在三个可能的分界位置中,分界后的某一侧包含的编号集合分别会出现 、 或 ;它们都不是连续编号区间,因此不存在合法的最后一次接片。
样例 #5 中,最后一次接片可以在第 帧后分开,将 与 正向接合;也可以在第 帧后分开,将 与 正向接合。两种方式都只需用一次倒序接片得到 ,最小总代价为 。
数据规模与约定
对于所有数据,保证:
- ;
- ;
- 是 的一个排列。
本题采用子任务捆绑计分。只有通过某个子任务内的所有测试点,才能获得该子任务的分数。各子任务独立计分。
| 子任务编号 | 分值 | 额外约束 |
|---|---|---|
| 1 | 10 | |
| 2 | 15 | 或 |
| 3 | 25 | |
| 4 | 50 | 无特殊限制 |