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...