题目描述
{ 1, …, N } の順列 p = (p1, …, pN) が与えられます。 あなたは、次の 2 種類の操作を好きな順序で繰り返し行うことができます。
- コスト A を支払う。 整数 l と r (1 ≤ l < r ≤ N) を自由に選び、(pl, …, pr) を左にひとつシフトする。 すなわち、pl, pl + 1, …, pr − 1, pr をそれぞれ pl + 1, pl + 2, …, pr, pl へ置き換える。
- コスト B を支払う。 整数 l と r (1 ≤ l < r ≤ N) を自由に選び、(pl, …, pr) を右にひとつシフトする。 すなわち、pl, pl + 1, …, pr − 1, pr をそれぞれ pr, pl, …, pr − 2, pr − 1 へ置き換える。
p を昇順にソートするために必要な総コストの最小値を求めてください。
输入格式
入力は以下の形式で標準入力から与えられる。
N A B p1 ⋯ pN
输出格式
p を昇順にソートするために必要な総コストの最小値を出力せよ。
题目大意
给定一个排列, 你可以花费A使一个区间最左边的数跑到最右边, 或者花费B的代价使最右边到最左边, 求把整个序列变成升序的最少花费
3 20 30
3 1 2
20
4 20 30
4 2 3 1
50
1 10 10
1
0
4 1000000000 1000000000
4 3 2 1
3000000000
9 40 50
5 3 4 7 6 1 2 9 8
220
提示
制約
- 入力はすべて整数である。
- 1 ≤ N ≤ 5000
- 1 ≤ A, B ≤ 109
- (p1 …, pN) は { 1, …, N } の順列である。
Sample Explanation 1
(p1, p2, p3) を左にひとつシフトすると、p = (1, 2, 3) となります。
Sample Explanation 2
例えば、次のように操作を行えばよいです。 - (p1, p2, p3, p4) を左にひとつシフトする。 すると、p = (2, 3, 1, 4) となる。 - (p1, p2, p3) を右にひとつシフトする。 すると、p = (1, 2, 3, 4) となる。 このとき、総コストは 20 + 30 = 50 です。