제출 #1181713

#제출 시각아이디문제언어결과실행 시간메모리
1181713mehmetkaganVisiting Singapore (NOI20_visitingsingapore)C++20
4 / 100
109 ms193572 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int ll
const int NEG = -1000000000000000000LL;
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 j = 1; j <= m; j++) cin >> T[j];
    vector<vector<int>> M(n+1, vector<int>(m+1, NEG));
    vector<vector<int>> I(n+1, vector<int>(m+1, NEG));
    vector<vector<int>> D(n+1, vector<int>(m+1, NEG));
    for (int i = 0; i <= n; i++){
        I[i][0] = 0;
        M[i][0] = NEG;
        D[i][0] = NEG;
    }
    for (int j = 1; j <= m; j++){
        M[0][j] = NEG;
        I[0][j] = NEG;
        D[0][j] = NEG;
    }
    for (int i = 1; i <= n; i++){
        for (int j = 1; j <= m; j++){
            if(S[i] == T[j]){
                int cand = max({M[i-1][j-1], I[i-1][j-1], D[i-1][j-1]});
                if(j == 1) cand = max(cand, (int)0);
                if(cand != NEG) 
                    M[i][j] = cand + V[T[j]];
            }
            int candI1 = I[i-1][j] + B;
            int candI2 = M[i-1][j] + A + B;
            int candI3 = D[i-1][j] + A + B;
            I[i][j] = max({candI1, candI2, candI3});
            int candD1 = D[i][j-1] + B;
            int candD2 = M[i][j-1] + A + B;
            int candD3 = I[i][j-1] + A + B;
            D[i][j] = max({candD1, candD2, candD3});
        }
    }
    int ans = 0;
    for (int i = 1; i <= n; i++){
        ans = max(ans, max({M[i][m], I[i][m], D[i][m]}));
    }
    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...