CF1866J Jackets and Packets
题目描述
Pak Chanek 有 $N$ 件夹克,这些夹克被存放在一个衣柜里。Pak Chanek 的衣柜有足够的空间放置两叠夹克,分别是左边的夹克堆和右边的夹克堆。最开始,所有 $N$ 件夹克都在左边的夹克堆中,右边的夹克堆为空。最初,左边夹克堆从上到下的第 $i$ 件夹克的颜色为 $C_i$。
Pak Chanek 想要把所有夹克打包成若干包,每一包内的夹克颜色相同。然而,相同颜色的夹克可以被分在不同的包中。
Pak Chanek 可以进行两种操作:
- Pak Chanek 可以从某个堆的顶部取出任意数量、颜色相同的夹克,然后将这些夹克打包成一包。无论打包多少件夹克,这个打包操作都需要 $X$ 分钟。
- Pak Chanek 可以将某个堆顶部的夹克移动到另一个堆的顶部(可以从左到右,也可以从右到左)。每次移动操作需要 $Y$ 分钟。
请你计算,将所有夹克全部打包所需的最少时间。
输入格式
第一行包含三个整数 $N$、$X$ 和 $Y$($1 \leq N \leq 400$;$1 \leq X, Y \leq 10^9$),分别表示夹克的数量、一次打包操作所需的时间和一次移动操作所需的时间。
第二行包含 $N$ 个整数 $C_1, C_2, \ldots, C_N$($1 \leq C_i \leq N$),表示每件夹克的颜色。
输出格式
输出一个整数,表示将所有夹克全部打包所需的最少时间。
说明/提示
我们用数组表示两个堆中夹克的颜色,从上到下排列。最开始,两个堆分别为 $[4, 4, 2, 4, 1, 2, 2, 1]$ 和 $[]$。
Pak Chanek 可以按如下顺序操作:
1. 从左堆移动到右堆。两个堆变为 $[4, 2, 4, 1, 2, 2, 1]$ 和 $[4]$。
2. 从左堆移动到右堆。两个堆变为 $[2, 4, 1, 2, 2, 1]$ 和 $[4, 4]$。
3. 从左堆顶部打包 $1$ 件夹克。两个堆变为 $[4, 1, 2, 2, 1]$ 和 $[4, 4]$。
4. 从左堆移动到右堆。两个堆变为 $[1, 2, 2, 1]$ 和 $[4, 4, 4]$。
5. 从左堆移动到右堆。两个堆变为 $[2, 2, 1]$ 和 $[1, 4, 4, 4]$。
6. 从左堆顶部打包 $2$ 件夹克。两个堆变为 $[1]$ 和 $[1, 4, 4, 4]$。
7. 从右堆移动到左堆。两个堆变为 $[1, 1]$ 和 $[4, 4, 4]$。
8. 从右堆顶部打包 $3$ 件夹克。两个堆变为 $[1, 1]$ 和 $[]$。
9. 从左堆顶部打包 $2$ 件夹克。两个堆变为 $[]$ 和 $[]$。
总共需要 $2+2+7+2+2+7+2+7+7=38$ 分钟来打包所有夹克。可以证明没有更快的方法。
由 ChatGPT 4.1 翻译