Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 有n层楼梯,每次可以爬1~2步,问能爬的最少的能整除 m 的步数是多少? n <= 10000, m < 20.
- 请问怎么把下边的 DFS + Memoization 转换成 DP 数组递推?
- class Solution:
- def minStep(self, n, m):
- if n < m:
- return -1
- # DFS + memoization,
- f = [[-1] * (n + 1) for _ in range(n + 1)]
- ans = self.dfs(n, m, 0, f)
- if ans == float("inf"):
- return -1
- return ans
- def dfs(self, n, m, steps, f):
- if n < 0:
- return float("inf")
- if n == 0:
- if steps % m == 0:
- f[n][steps] = steps
- return steps
- return float("inf")
- if f[n][steps] != -1:
- return f[n][steps]
- ans = float("inf")
- ans = min(ans, self.dfs(n - 1, m, steps + 1, f))
- ans = min(ans, self.dfs(n - 2, m, steps + 1, f))
- f[n][steps] = ans
- return ans
- n, m = 271, 5
- n, m = 10, 2
- o = Solution()
- ans = o.minStep(n, m)
- print(ans)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement