Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct Dp<'a> {
- f: &'a dyn Fn(&Dp, u64, usize) -> u64
- }
- let memo = RefCell::new(HashMap::new());
- let dp = Dp {
- f: &|dp, x, i| {
- if let Some(res) = memo.borrow().get(&(x, i)) { return *res; }
- let res = if i == n-1 {
- x / A[i]
- } else {
- let fl = x.div_floor(A[i+1]) * A[i+1];
- let ce = x.div_ceil(A[i+1]) * A[i+1];
- min((x - fl) / A[i] + (dp.f)(dp, fl, i+1), (ce - x) / A[i] + (dp.f)(dp, ce, i+1))
- };
- memo.borrow_mut().insert((x, i), res);
- res
- }
- };
- let ans = (dp.f)(&dp, x, 0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement