P5971 [CTSC2009] 移盘子

题目描述

已知有三根柱子,分别记为 $A$, $B$ 和 $C$。初始状态时 $A$ 上放有 $N$ 个盘子,而 $B$ 和 $C$ 两个柱子上没有放任何盘子。你每次能做的移动操作就是把某根柱子最上面的一个盘子拿下来,然后放到另一个柱子上。盘子有三类,分别用 $1$, $2$, $3$ 来表示。你的目标是,让所有 $1$ 类盘子最终放在 $A$ 上,让所有 $2$ 类盘子最终放在 $B$ 上,所有 $3$ 类盘子最终放在 $C$ 上。现在让你求出实现上述目标总共最少需要多少次移动?

输入格式

输入文件 trique.in 第一行包含一个整数 $N$,为盘子的总数。 第二行有 $N$ 个数,每个数只能是 $1$, $2$, $3$ 之一。这 $N$ 个数表示在初始状态时第一个柱子上所有盘子的类型,按照从上往下的顺序。

输出格式

输出文件 trique.out 只包含一个数,即最少的移动次数。

说明/提示

### 样例说明 初始状态如下图: ![](https://cdn.luogu.com.cn/upload/image_hosting/caccgwlp.png) ![](https://cdn.luogu.com.cn/upload/image_hosting/d686q4vz.png) ### 数据范围 对于 $20$%的数据, 盘子的种类不超过 $2$ 种; 对于 $40$%的数据, $N \leq 300$; 对于 $100$%的数据, $N \leq 1000$。