题目描述
给定一个 {1,…,N} 的排列 p=(p1,…,pN)。你可以按任意顺序重复进行以下两种操作:
- 支付代价 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 升序排序所需的最小总代价。
样例 1
输入
3 20 30
3 1 2
输出
20
样例 2
输入
4 20 30
4 2 3 1
输出
50
样例 3
输入
1 10 10
1
输出
0
样例 4
输入
4 1000000000 1000000000
4 3 2 1
输出
3000000000
样例 5
输入
9 40 50
5 3 4 7 6 1 2 9 8
输出
220
说明/提示
限制条件
- 所有输入均为整数。
- 1≤N≤5000
- 1≤A,B≤109
- (p1,…,pN) 是 {1,…,N} 的一个排列。
样例解释 1
将 (p1,p2,p3) 向左移动一位后,p=(1,2,3)。
样例解释 2
例如,可以按如下方式操作:
- 将 (p1,p2,p3,p4) 向左移动一位,此时 p=(2,3,1,4)。
- 将 (p1,p2,p3) 向右移动一位,此时 p=(1,2,3,4)。
此时总代价为 20+30=50。
由 ChatGPT 4.1 翻译