Submission #1064596

#TimeUsernameProblemLanguageResultExecution timeMemory
1064596beaconmcTricks of the Trade (CEOI23_trade)C++14
45 / 100
353 ms457896 KiB
#include <bits/stdc++.h>
 
typedef long long ll;
#define FOR(i,x,y) for(ll i=x; i<y; i++)
#define FORNEG(i,x,y) for(ll i=x; i>y; i--)
 
using namespace std;


ll dp[250005][205];
bool visited[250005][205];

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	FOR(i,0,250005)FOR(j,0,205) dp[i][j] = -100000000000000000, visited[i][j] = 0;

	ll n,k;
	cin >> n >> k;
	vector<ll> price(n), sell(n);
	FOR(i,0,n) cin >> price[i];
	FOR(i,0,n) cin >> sell[i];
	FOR(i,0,n) dp[i][0] = 0;


	FOR(i,0,n){
		FOR(j,0,204){
			dp[i+1][j+1] = max(dp[i][j] + sell[i] - price[i], dp[i][j+1] - price[i]);
		}
	}


	ll ans = -100000000000000000;

	FOR(i,k,n+1){
		ans = max(ans, dp[i][k]);
	}
	FOR(i,k,n+1){
		if (dp[i][k]==ans) visited[i][k] = 1;
	}

	vector<ll> used(n);

	FORNEG(i,n-1,-1){
		FORNEG(j,203,-1){
			if (dp[i+1][j+1] == dp[i][j] + sell[i] - price[i]&& visited[i+1][j+1]){
				visited[i][j] = 1;
				used[i]=1;
			}
			if (dp[i+1][j+1] == dp[i][j+1] - price[i]&& visited[i+1][j+1]){
				visited[i][j+1] = 1;
			}
		}
	}




	cout << ans << endl;
	FOR(i,0,n) cout << used[i];







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