Submission #1286411

#TimeUsernameProblemLanguageResultExecution timeMemory
1286411jackofall718Visiting Singapore (NOI20_visitingsingapore)C++20
24 / 100
213 ms196344 KiB
#include <bits/stdc++.h> #include <chrono> #define ll long long int #define endl '\n' #define vn vector<ll> #define vi vector<pair <ll,ll>> using namespace std; using namespace std::chrono; const int MAX_N = 1e9 + 7; #define pii pair<ll,ll> const ll INF = 0x3f3f3f3f3f3f3f3f; #define pb push_back #define srt(vp) sort(vp.begin(), vp.end()) int main() { ios::sync_with_stdio(false); cin.tie(nullptr); auto start = high_resolution_clock::now(); ll k,n,m,a,b; cin>>k>>n>>m>>a>>b; vn v(k+1);//v for (int i=1;i<=k;i++)cin>>v[i]; vn s(n+1);//s for (int i=1;i<=n;i++)cin>>s[i]; vn t(m+1);//t for (int i=1;i<=m;i++)cin>>t[i]; map <ll,vn> pos; set <ll> s2; for (int i=1;i<=m;i++){ pos [t[i]].pb(i); s2.insert(t[i]); } vector <vn> dp(n+1,vn(m+1,-MAX_N)); for (int i=0;i<=n;i++)dp[i][0]=0; ll ans = a+m*b; vn optimal (m+1,-MAX_N); for (int i=1;i<=n;i++){ ll temp = -MAX_N; if (s2.count(s[i])){ for (auto &x:pos[s[i]]){ dp[i][x]=max(dp[i][x],dp[i-1][x-1]+v[s[i]]); dp[i][x]=max(dp[i][x],a+v[s[i]]); } } for (int j=1;j<=m;j++){ optimal [j]= max(dp[i][j],optimal[j]); dp[i][j]=max(dp[i][j],optimal[j]+a); temp = max(dp[i][j],temp); dp[i][j]=max(dp[i][j],temp + a); } for (int j=1;j<=m;j++){ ans=max(ans,dp[i][j]+(j != m)*a); } } cout<<ans<<endl; auto stop = high_resolution_clock::now(); auto duration = duration_cast<microseconds>(stop - start); //cout << "Time taken by function: " << duration.count() << " microseconds" << 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...