#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int ll
int32_t main() {
ios::sync_with_stdio(false);
cin.tie(0);
int K, n, m, A, B;
cin >> K >> n >> m >> A >> B;
vector<int> V(K + 1);
for (int i = 1; i <= K; ++i) cin >> V[i];
vector<int> S(n + 1), T(m + 1);
for (int i = 1; i <= n; ++i) cin >> S[i];
for (int i = 1; i <= m; ++i) cin >> T[i];
const int INF = 1e18;
vector<vector<int>> dp(n + 1, vector<int>(m + 1, -INF));
dp[0][0] = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j <= m; ++j) {
if (dp[i][j] == -INF) continue;
int cost = A + B;
dp[i + 1][j] = max(dp[i + 1][j], dp[i][j] + cost);
if (j < m && S[i + 1] == T[j + 1]) {
dp[i + 1][j + 1] = max(dp[i + 1][j + 1], dp[i][j] + V[T[j + 1]]);
}
}
}
int ans = -INF;
for (int i = 0; i <= n; ++i) {
for (int j = 0; j <= m; ++j) {
int remain = m - j;
int penalty = 0;
if (remain > 0) penalty = A + remain * B;
ans = max(ans, dp[i][j] + penalty);
}
}
cout << ans << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |