제출 #1151211

#제출 시각아이디문제언어결과실행 시간메모리
1151211pinbuCollecting Stamps 3 (JOI20_ho_t3)C++20
100 / 100
806 ms65904 KiB
#include <bits/stdc++.h> using namespace std; const int N = 203; const long long oo = 1e18; void mini(long long &X, long long Y) { if (X > Y) X = Y; } int n, l, x[N], ti[N]; long long dp[N][N][N][2]; void solve(void) { cin >> n >> l; x[0] = 0; x[n + 1] = l; for (int i = 1; i <= n; i++) cin >> x[i]; for (int i = 1; i <= n; i++) cin >> ti[i]; for (int p = 0; p <= n; p++) { for (int s = p + 1; s <= n + 1; s++) { for (int score = 0; score <= n; score++) { dp[p][s][score][0] = dp[p][s][score][1] = oo; } } } dp[0][n + 1][0][0] = dp[0][n + 1][0][1] = 0; for (int p = 0; p <= n; p++) { for (int s = n + 1; s > p; s--) { for (int score = 0; score <= n; score++) { int t; if (dp[p][s][score][1] < oo) { t = 0; for (int i = p + 1; i < s; i++) { t += 2 * dp[p][s][score][1] + x[i] <= ti[i]; mini(dp[i][s][score + t][0], dp[p][s][score][1] + x[i]); } } if (dp[p][s][score][0] < oo) { t = 0; for (int i = s - 1; i > p; i--) { t += 2 * dp[p][s][score][0] + l - x[i] <= ti[i]; mini(dp[p][i][score + t][1], dp[p][s][score][0] + l - x[i]); } } } } } int ans = 0; for (int i = 1; i <= n + 1; i++) { for (int score = n; score; score--) { if (min(dp[i - 1][i][score][0], dp[i - 1][i][score][1]) < oo) { ans = max(ans, score); break; } } } cout << ans; } signed main(void) { ios::sync_with_stdio(false); cin.tie(nullptr); int T = 1;// cin >> T; while (T--) solve(); 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...