Submission #1191195

#TimeUsernameProblemLanguageResultExecution timeMemory
1191195UnforgettableplTricks of the Trade (CEOI23_trade)C++20
55 / 100
978 ms2162688 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int N,K; cin >> N >> K; vector<int> c(N+1),s(N+1); for(int i=1;i<=N;i++)cin>>c[i]; for(int i=1;i<=N;i++)cin>>s[i]; vector DP(N+1,vector<int>(K+1)); for(int i=1;i<=K;i++)DP[0][i]=-1e15; int ans = -1e15; for(int i=1;i<=N;i++){ for(int j=1;j<=K;j++){ DP[i][j]=max(DP[i-1][j]-c[i],DP[i-1][j-1]-c[i]+s[i]); } ans = max(ans,DP[i][K]); } // cout << "DEBUG:\n"; // for(int i=1;i<=K;i++){ // int carm = -1e15; // for(int j=1;j<=N;j++)carm=max(carm,DP[j][i]); // cout << carm << ' '; // } // cout << "\nDEBUG END\n"; cout << ans << '\n'; vector<bool> seq(N+1); vector visited(N+1,vector<bool>(K+1)); visited[0][0]=true; function<void(int,int)> dfs = [&](int i,int j){ if(visited[i][j])return; visited[i][j]=true; if(j and DP[i][j]==DP[i-1][j-1]-c[i]+s[i]){ seq[i]=true; dfs(i-1,j-1); } if(DP[i][j]==DP[i-1][j]-c[i]){ dfs(i-1,j); } }; for(int i=1;i<=N;i++)if(DP[i][K]==ans)dfs(i,K); for(int i=1;i<=N;i++)cout<<seq[i]; cout << '\n'; }
#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...