1
+ /* *
2
+ * @file 2292.cpp
3
+ * @author Macesuted ([email protected] )
4
+ * @date 2022-09-12
5
+ *
6
+ * @copyright Copyright (c) 2022
7
+ *
8
+ */
9
+
10
+ #include < bits/stdc++.h>
11
+ using namespace std ;
12
+
13
+ #ifndef LOCAL
14
+ #define endl ' \n '
15
+ #endif
16
+
17
+ bool mem1;
18
+
19
+ #define maxn 55
20
+
21
+ int a[maxn], v[maxn], f[maxn][maxn][maxn][maxn], g[maxn][maxn];
22
+
23
+ void solve (void ) {
24
+ int n, A, B;
25
+ cin >> n >> A >> B;
26
+ for (int i = 1 ; i <= n; i++) cin >> a[i], v[i] = a[i];
27
+ sort (v + 1 , v + n + 1 );
28
+ int vn = unique (v + 1 , v + n + 1 ) - v - 1 ;
29
+ for (int i = 1 ; i <= n; i++) a[i] = lower_bound (v + 1 , v + vn + 1 , a[i]) - v;
30
+ memset (f, 0x3f , sizeof (f)), memset (g, 0x3f , sizeof (g));
31
+ for (int i = 1 ; i <= n; i++) g[i][i] = A;
32
+ for (int len = 2 ; len <= n; len++)
33
+ for (int l = 1 , r = len; r <= n; l++, r++)
34
+ for (int vl = 1 ; vl <= vn; vl++)
35
+ for (int vr = vl; vr <= vn; vr++) {
36
+ int tl = l, tr = r;
37
+ while (tl <= r && vl <= a[tl] && a[tl] <= vr) tl++;
38
+ while (tr >= l && vl <= a[tr] && a[tr] <= vr) tr--;
39
+ if (tl == r + 1 )
40
+ f[l][r][vl][vr] = 0 ;
41
+ else {
42
+ f[l][r][vl][vr] = g[tl][tr];
43
+ for (int k = l; k < r; k++)
44
+ f[l][r][vl][vr] = min (f[l][r][vl][vr], f[l][k][vl][vr] + f[k + 1 ][r][vl][vr]);
45
+ }
46
+ g[l][r] = min (g[l][r], f[l][r][vl][vr] + A + B * (v[vr] - v[vl]) * (v[vr] - v[vl]));
47
+ }
48
+ cout << g[1 ][n] << endl;
49
+ return ;
50
+ }
51
+
52
+ bool mem2;
53
+
54
+ int main () {
55
+ ios::sync_with_stdio (false ), cin.tie (nullptr );
56
+ #ifdef LOCAL
57
+ cerr << " Memory Cost: " << abs (&mem1 - &mem2) / 1024 . / 1024 . << " MB" << endl;
58
+ #endif
59
+
60
+ int _ = 1 ;
61
+ while (_--) solve ();
62
+
63
+ #ifdef LOCAL
64
+ cerr << " Time Cost: " << clock () * 1000 . / CLOCKS_PER_SEC << " MS" << endl;
65
+ #endif
66
+ return 0 ;
67
+ }
0 commit comments