#include <bits/stdc++.h>
using namespace std;
const int N = 205;
int n, l, x[N], ti[N], dp[N][N][2][N];
int DP1(int p, int s, int d, int t) {
if (p + 1 == s) return 0;
int &T = dp[p][s][d][t];
if (T >= 0) return T;
T = 0;
if (!d) {
int tt = 0;
for (int i = p + 1; i < s; i++) {
tt += 2 * ((t + 1) / 2) * x[p] + 2 * (t / 2) * (l - x[s]) + x[i] <= ti[i];
T = max(T, tt + DP1(i, s, 1, t + 1));
}
} else {
int tt = 0;
for (int i = s - 1; i > p; i--) {
tt += 2 * ((t + 1) / 2) * x[p] + 2 * (t / 2) * (l - x[s]) + l - x[i] <= ti[i];
T = max(T, tt + DP1(p, i, 0, t + 1));
}
}
return T;
}
int DP2(int p, int s, int d, int t) {
if (p + 1 == s) return 0;
int &T = dp[p][s][d][t];
if (T >= 0) return T;
T = 0;
if (d) {
int tt = 0;
for (int i = s - 1; i > p; i--) {
tt += 2 * (t / 2) * x[p] + 2 * ((t + 1) / 2) * (l - x[s]) + l - x[i] <= ti[i];
T = max(T, tt + DP2(p, i, 0, t + 1));
}
} else {
int tt = 0;
for (int i = p + 1; i < s; i++) {
tt += 2 * (t / 2) * x[p] + 2 * ((t + 1) / 2) * (l - x[s]) + x[i] <= ti[i];
T = max(T, tt + DP2(i, s, 1, t + 1));
}
}
return T;
}
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];
if (n == 1) return void(cout << (min(x[1], l - x[1]) <= ti[1]));
memset(dp, -1, sizeof dp);
cout << max(DP1(0, n + 1, 0, 0), DP2(0, n + 1, 1, 0));
}
signed main(void) {
ios::sync_with_stdio(false); cin.tie(nullptr);
int T = 1;// cin >> T;
while (T--) solve();
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... |