Submission #1193110

#TimeUsernameProblemLanguageResultExecution timeMemory
1193110loomVisiting Singapore (NOI20_visitingsingapore)C++20
100 / 100
162 ms636 KiB
#include<bits/stdc++.h> using namespace std; #define inf 1e9 #define nl '\n' int ldp[5001][2][2]; int dp[5001][2][2]; inline void solve(){ int k, n, m, a, b; cin>>k>>n>>m>>a>>b; a *= -1, b *= -1; int v[k+1], s[n+1], t[m+1]; for(int i=1; i<=k; i++) cin>>v[i]; for(int i=1; i<=n; i++) cin>>s[i]; for(int i=1; i<=m; i++) cin>>t[i]; for(int i=0; i<=m; i++){ ldp[i][0][0] = -2*a - i*b; ldp[i][0][1] = ldp[i][1][0] = ldp[i][1][1] = -inf; } int ans = -a - m*b; for(int i=1; i<=n; i++){ dp[0][0][0] = -2*a - i*b; dp[0][0][1] = dp[0][1][0] = dp[0][1][1] = -inf; for(int j=1; j<=m; j++){ dp[j][0][0] = max({ldp[j-1][0][0], ldp[j-1][0][1] - a, ldp[j-1][1][0] - a, ldp[j-1][1][1] - 2*a}) - 2*b; dp[j][0][1] = max(ldp[j][0][1], ldp[j][1][1] - a) - b; dp[j][1][0] = max(dp[j-1][1][0], dp[j-1][1][1] - a) - b; dp[j][1][1] = -inf; if(s[i] == t[j]) dp[j][1][1] = v[s[i]] + max({ldp[j-1][0][0], ldp[j-1][0][1], ldp[j-1][1][0], ldp[j-1][1][1], (j == 1 ? 0 : -a) - (j-1)*b}); ans = max(ans, dp[j][1][1] - (j == m ? 0 : a) - (m-j)*b); } for(int j=0; j<=m; j++) for(int k=0; k<2; k++) for(int l=0; l<2; l++) ldp[j][k][l] = dp[j][k][l]; } cout<<ans; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(NULL);cout.tie(NULL); int t = 1; //cin>>t; while(t--) solve(); 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...