Advertisement
Guest User

Spheniscine - recursive closure example

a guest
Jan 19th, 2023
511
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 0.67 KB | None | 0 0
  1.     struct Dp<'a> {
  2.        f: &'a dyn Fn(&Dp, u64, usize) -> u64
  3.     }
  4.  
  5.     let memo = RefCell::new(HashMap::new());
  6.     let dp = Dp {
  7.         f: &|dp, x, i| {
  8.             if let Some(res) = memo.borrow().get(&(x, i)) { return *res; }
  9.             let res = if i == n-1 {
  10.                 x / A[i]
  11.             } else {
  12.                 let fl = x.div_floor(A[i+1]) * A[i+1];
  13.                 let ce = x.div_ceil(A[i+1]) * A[i+1];
  14.  
  15.                 min((x - fl) / A[i] + (dp.f)(dp, fl, i+1), (ce - x) / A[i] + (dp.f)(dp, ce, i+1))
  16.             };
  17.  
  18.             memo.borrow_mut().insert((x, i), res);
  19.             res
  20.         }
  21.     };
  22.  
  23.     let ans = (dp.f)(&dp, x, 0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement