题目描述
题目描述
有 个展台按顺时针方向围成一圈。第 个展台需要展示一座高为 的积木塔,从下到上的颜色依次为
机器人始终使用同一个托盘搭塔。每次可以进行以下一种操作,代价均为 :
- 移走塔顶的一块积木;
- 在塔顶放上一块指定颜色的积木。
机器人可以任选一个展台作为起点。开始时托盘为空,之后按顺时针方向访问所有展台各一次。
到达每个展台时,机器人需要通过增删塔顶积木,使托盘上的塔与该展台要求的塔完全相同。也就是说,机器人不会重新搭一座塔,而是把上一座塔逐步改成下一座塔。
例如,下图中先移走塔顶的红色积木,再放上一块黄色积木,就能把左边的塔变成右边的塔。

展台围成一圈,起点可以任意选择。例如选择 号展台作为起点,则访问顺序为

完成最后一个展台的展示后,机器人可以直接停止,不需要清空托盘。
请计算完成所有展示最少需要多少次操作。
输入格式
从文件 tower.in 中读取数据。
第一行输入两个整数 ,分别表示展台数量和积木颜色的种数。颜色用 到 的整数编号。
接下来 行,第 行先输入一个整数 ,随后输入 个整数 ,按从下到上的顺序描述第 个展台要求的塔。当 时,这一行只包含整数 。
输出格式
输出到文件 tower.out 中。
输出一个整数,表示最少操作次数。
4 4
3 1 2 3
2 1 2
2 1 4
3 1 4 3
7
3 2
0
2 1 2
1 1
3
样例解释
样例 #1 中,可以选择第 个展台作为第一个展台。先用 次操作搭出颜色依次为 的塔;前往第 个展台时移走塔顶积木;前往第 个展台时先移走颜色为 的积木,再放上颜色为 的积木;最后放上一块颜色为 的积木。总操作次数为 。
样例 #2 中,可以选择要求空塔的第 个展台作为第一个展台。随后用 次操作搭出第 个展台的塔,再移走塔顶积木即可完成第 个展台的展示,共需 次操作。
数据规模与约定
对于所有数据,保证:
- ;
- ;
- ;
- ;
- ;
- 输入中的所有数均为整数。
本题采用子任务捆绑计分。只有通过某个子任务内的所有测试点,才能获得该子任务的分数。各子任务独立计分。
| 子任务 | 分值 | 额外约束 |
|---|---|---|
| 无特殊限制 |