构造序列

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, A, B;
    cin >> n >> A >> B;
    vector<long long> dp(n + 1);
    // 边界条件:dp[0] = 0; 
    int pre_c = -1;
    int last_not_equal;
    int last_not_lianxu;
    for (int i = 1; i <= n; i++) {
        int c;
        cin >> c;
        if (c != pre_c)
            last_not_equal = i - 1;
        if (c != pre_c + 1)
            last_not_lianxu = i - 1;
        dp[i] = min(A + dp[last_not_equal], B + dp[last_not_lianxu]);
        pre_c = c;
    }
    cout << dp[n] << '\n';
}