제출 #1181703

#제출 시각아이디문제언어결과실행 시간메모리
1181703mehmetkaganVisiting Singapore (NOI20_visitingsingapore)C++20
10 / 100
12 ms19272 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...