제출 #1288522

#제출 시각아이디문제언어결과실행 시간메모리
1288522LIATricks of the Trade (CEOI23_trade)C++17
55 / 100
1271 ms2162688 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define vll vector<ll> #define pll pair<ll, ll> #define tp tuple<ll, ll, ll> const ll inf = 1e18; int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); ll n, k, ans = -1e18; cin >> n >> k; vll b(n), s(n); for (ll i = 0; i < n; ++i) cin >> b[i]; for (ll i = 0; i < n; ++i) cin >> s[i]; vector<vll> dp(n + 1, vll(k + 1, -inf)); for (ll i = 0; i <= n; ++i) dp[i][0] = 0; vll pref(n + 1, 0); for (ll i = 1; i <= n; ++i) pref[i] = pref[i - 1] + b[i - 1]; for (ll j = 1; j <= k; ++j) { ll best = (j == 1 ? 0 : inf); for (ll i = 1; i <= n; ++i) { if (best != inf) dp[i][j] = s[i - 1] - pref[i] - best; if (dp[i][j - 1] > -inf / 2) { ll cand = -(dp[i][j - 1] + pref[i]); if (cand < best) best = cand; } } } for (ll i = 1; i <= n; ++i) ans = max(ans, dp[i][k]); set<ll> in; ll cur = ans; ll took = 0; vll br = b, sr = s; reverse(br.begin(), br.end()); reverse(sr.begin(), sr.end()); vll prefr(n + 1, 0); for (ll i = 1; i <= n; ++i) prefr[i] = prefr[i - 1] + br[i - 1]; vector<vll> dpr(n + 1, vll(k + 1, -inf)); for (ll i = 0; i <= n; ++i) dpr[i][0] = 0; for (ll j = 1; j <= k; ++j) { ll best = (j == 1 ? 0 : inf); for (ll i = 1; i <= n; ++i) { if (best != inf) dpr[i][j] = sr[i - 1] - prefr[i] - best; if (dpr[i][j - 1] > -inf / 2) { ll cand = -(dpr[i][j - 1] + prefr[i]); if (cand < best) best = cand; } } } vector<char> out(n, '0'); for (ll i = 1; i <= n; ++i) { bool ok = false; for (ll j = 1; j <= k && !ok; ++j) { ll jr = k - j + 1; ll li = i; ll ri = n - i + 1; if (dp[li][j] <= -inf / 2) continue; if (dpr[ri][jr] <= -inf / 2) continue; ll val = dp[li][j] + dpr[ri][jr] - s[i - 1] + b[i - 1]; if (val == ans) ok = true; } if (ok) { out[i - 1] = '1'; in.insert(i); } } cout << ans << endl; for (ll i = 1; i <= n; ++i) cout << (in.count(i) ? '1' : '0'); 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...