Submission #442058

#TimeUsernameProblemLanguageResultExecution timeMemory
442058idontreallyknowCollecting Stamps 3 (JOI20_ho_t3)C++17
100 / 100
127 ms135384 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> pii; #define fi first #define se second #define SZ(x) ((int)((x).size())) #define debug(x) cerr << #x << " = " << x << '\n' template <typename T> bool chkmin(T &x,T y){return x>y?x=y,true:false;} const int mx = 205; ll n, l, dp[mx][mx][mx][2], inf = (ll)1e17+5; pii p[mx]; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> l; for (int q = 1; q <= n; q++) cin >> p[q].fi; for (int q = 1; q <= n; q++) cin >> p[q].se; p[n+1] = {l,-1}; for (int q = 0; q < mx; q++) for (int w = 0; w < mx; w++) for (int e = 0; e < mx; e++) dp[q][w][e][0] = dp[q][w][e][1] = inf; for (int q = 0; q <= n; q++) { for (int w = n+1; w > q; w--) { if (q == 0 && w == n+1) { dp[q][w][0][0] = dp[q][w][0][1] = 0; continue; } for (int e = 0; e < mx; e++) { if (q == 0) { chkmin(dp[q][w][e][1], dp[q][w+1][e][1]+p[w+1].fi-p[w].fi); if (e > 0 && dp[q][w+1][e-1][1]+p[w+1].fi-p[w].fi <= p[w].se) { chkmin(dp[q][w][e][1], dp[q][w+1][e-1][1]+p[w+1].fi-p[w].fi); } chkmin(dp[q][w][e][0], dp[q][w][e][1]+l-p[w].fi); } else if (w == n+1) { chkmin(dp[q][w][e][0], dp[q-1][w][e][0]+p[q].fi-p[q-1].fi); if (e > 0 && dp[q-1][w][e-1][0]+p[q].fi-p[q-1].fi <= p[q].se) { chkmin(dp[q][w][e][0], dp[q-1][w][e-1][0]+p[q].fi-p[q-1].fi); } chkmin(dp[q][w][e][1], dp[q][w][e][0]+p[q].fi); } else { chkmin(dp[q][w][e][0], dp[q-1][w][e][0]+p[q].fi-p[q-1].fi); chkmin(dp[q][w][e][0], dp[q-1][w][e][1]+l-p[w].fi+p[q].fi); chkmin(dp[q][w][e][1], dp[q][w+1][e][1]+p[w+1].fi-p[w].fi); chkmin(dp[q][w][e][1], dp[q][w+1][e][0]+p[q].fi+l-p[w].fi); if (e > 0) { if (dp[q-1][w][e-1][0]+p[q].fi-p[q-1].fi <= p[q].se) { chkmin(dp[q][w][e][0], dp[q-1][w][e-1][0]+p[q].fi-p[q-1].fi); } if (dp[q-1][w][e-1][1]+l-p[w].fi+p[q].fi <= p[q].se) { chkmin(dp[q][w][e][0], dp[q-1][w][e-1][1]+l-p[w].fi+p[q].fi); } if (dp[q][w+1][e-1][1]+p[w+1].fi-p[w].fi <= p[w].se) { chkmin(dp[q][w][e][1], dp[q][w+1][e-1][1]+p[w+1].fi-p[w].fi); } if (dp[q][w+1][e-1][0]+p[q].fi+l-p[w].fi <= p[w].se) { chkmin(dp[q][w][e][1], dp[q][w+1][e-1][0]+p[q].fi+l-p[w].fi); } } } } } } int ans = 0; for (int q = 0; q < mx; q++) for (int w = 0; w < mx; w++) for (int e = 0; e < mx; e++) for (int r = 0; r < 2; r++) if (dp[q][w][e][r] != inf) ans = max(ans, e); cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...