제출 #1191193

#제출 시각아이디문제언어결과실행 시간메모리
1191193UnforgettableplTricks of the Trade (CEOI23_trade)C++20
25 / 100
1024 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));
    vector isOpt(N+1,vector<bool>(K+1));
    for(int i=1;i<=K;i++)DP[0][i]=-1e15;
    pair<int,int> ans = {-1e15,0};
    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]);
            if(DP[i][j]==DP[i-1][j-1]-c[i]+s[i])isOpt[i][j]=true;
        }
        ans = max(ans,{DP[i][K],i});
    }
    // 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.first << '\n';
    vector<bool> seq(N+1);
    int x = ans.second;
    for(int i=K;i;i--){
        while(!isOpt[x][i])x--;
        seq[x]=true;
        x--;
    }
    for(int i=1;i<=N;i++)cout<<(int)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...