#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF = numeric_limits<ll>::max()/4;
int main() {
int n, k;
cin >> n >> k;
vector<ll> vc (n);
for (int i = 0; i < n; i++) {
cin >> vc[i];
}
vector<ll> vs (n);
for (int i = 0; i < n; i++) {
cin >> vs[i];
}
vector<ll> p (n+1, 0);
for (int i = 0; i < n; i++) {
p[i+1] = p[i] - vc[i];
}
vector<vector<ll>> dp (k, vector<ll> (n, -INF));
vector<vector<int>> dp_p (k, vector<int> (n, -1));
for (int i = 0; i < n; i++) {
dp[0][i] = vs[i] - vc[i];
}
for (int i = 1; i < k; i++) {
ll mval = -INF;
int mid = -1;
for (int j = 0; j < n; j++) {
dp[i][j] = mval + p[j+1] + vs[j];
dp_p[i][j] = mid;
ll x = dp[i - 1][j] - p[j+1];
if (mval < x) {
mval = x;
mid = j;
}
}
}
vector<bool> sol (n-1, false);
sol[n-1] = true;
int cur = n-1;
int curk = k-1;
while (dp_p[curk][cur] != -1) {
cur = dp_p[curk][cur];
curk--;
sol[cur]= true;
}
cout << *max_element(dp[k-1].begin(), dp[k-1].end()) << "\n";
for (int i = 0; i < n; i++) {
if (sol[i]) cout << 1;
else cout << 0;
}
cout << "\n";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |