diff options
author | Anthony Wang | 2020-10-06 17:25:38 -0500 |
---|---|---|
committer | Anthony Wang | 2020-10-06 17:25:38 -0500 |
commit | d1791b90ae00a4f688218a9810e55d1db5311cdc (patch) | |
tree | 943c8bba67605bfdfae952e5c978eb4cab2dec4a /17/day2/cookie.cpp | |
parent | b356f63f0ba062096adf52ca69cfc366001c68a4 (diff) |
Diffstat (limited to '17/day2/cookie.cpp')
-rw-r--r-- | 17/day2/cookie.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/17/day2/cookie.cpp b/17/day2/cookie.cpp new file mode 100644 index 0000000..d03e72f --- /dev/null +++ b/17/day2/cookie.cpp @@ -0,0 +1,37 @@ +#include <bits/stdc++.h> +#define f first +#define s second +using namespace std; +using ll = long long; +using pl = pair<ll, ll>; + +ll C[5005], D[5005]; +pl DP[5005][5005]; + +int main() { + ios_base::sync_with_stdio(0), cin.tie(0); + + ll N, T, RA, RB; + cin >> N >> T >> RA >> RB; + for (int i = 0; i < N; ++i) cin >> C[i]; + for (int i = 0; i < N; ++i) cin >> D[i]; + + memset(DP, 63, sizeof(DP)); + DP[0][0] = pl(0, 0); + ll ans = T; + for (int i = 0; i <= N; ++i) { + for (int j = 0; j <= N; ++j) { + ll r = 1 + i * RA + j * RB; + if (i < N) { + ll t = max((C[i] + DP[i][j].s + r - 1) / r, 0ll); + DP[i + 1][j] = min(pl(DP[i][j].f + t, -t * r + C[i] + DP[i][j].s), DP[i + 1][j]); + } + if (j < N) { + ll t = max((D[j] + DP[i][j].s + r - 1) / r, 0ll); + DP[i][j + 1] = min(pl(DP[i][j].f + t, -t * r + D[j] + DP[i][j].s), DP[i][j + 1]); + } + ans = min(DP[i][j].f + max((T + DP[i][j].s + r - 1) / r, 0ll), ans); + } + } + cout << ans << '\n'; +}
\ No newline at end of file |