Submission #224288

#TimeUsernameProblemLanguageResultExecution timeMemory
224288maximath_1Visiting Singapore (NOI20_visitingsingapore)C++17
100 / 100
171 ms760 KiB
#include<bits/stdc++.h> using namespace std; int k, n, m, a, b, ans; int val[1005], s[5005], t[5005]; int dp[2][5005][2][2]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>k>>n>>m>>a>>b; for(int i=1; i<=k; i++) cin>>val[i]; for(int i=1; i<=n; i++) cin>>s[i]; for(int i=1; i<=m; i++){ cin>>t[i]; for(int a=0; a<2; a++) for(int b=0; b<2; b++) dp[0][i][a][b]=-1000000000; } ans=a+m*b; for(int i=1, id=1; i<=n; i++, id^=1){ for(int a=0; a<2; a++) for(int b=0; b<2; b++) dp[id][0][a][b]=-1000000000; for(int j=1; j<=m; j++){ if(s[i]==t[j]){ int tmp=(j==1)?0:(a+(j-1)*b); for(int a=0; a<2; a++) for(int b=0; b<2; b++) tmp=max(tmp, dp[id^1][j-1][a][b]); dp[id][j][1][1]=tmp+val[t[j]]; }else dp[id][j][1][1]=-1000000000; dp[id][j][1][0]=max(dp[id][j-1][1][0]+b, dp[id][j-1][1][1]+a+b); dp[id][j][0][1]=max(dp[id^1][j][0][1]+b, dp[id^1][j][1][1]+a+b); dp[id][j][0][0]=max(max(dp[id][j-1][0][0]+b, dp[id][j-1][0][1]+a+b), 2*a+b*(j+1)); } ans=max(ans, a+m*b); for(int a=0; a<2; a++) for(int b=0; b<2; b++) ans=max(ans, dp[id][m][a][b]); } cout<<ans<<endl; 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...