配点 : 1000 点
問題文
{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 を昇順にソートするために必要な総コストの最小値を求めてください。
制約
- 入力はすべて整数である。
- 1≤N≤5000
- 1≤A,B≤109
- (p1…,pN) は {1,…,N} の順列である。
入力
入力は以下の形式で標準入力から与えられる。
N A B
p1 ⋯ pN
出力
p を昇順にソートするために必要な総コストの最小値を出力せよ。
3 20 30
3 1 2
20
(p1,p2,p3) を左にひとつシフトすると、p=(1,2,3) となります。
4 20 30
4 2 3 1
50
例えば、次のように操作を行えばよいです。
- (p1,p2,p3,p4) を左にひとつシフトする。 すると、p=(2,3,1,4) となる。
- (p1,p2,p3) を右にひとつシフトする。 すると、p=(1,2,3,4) となる。
このとき、総コストは 20+30=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