题目描述:
方法一:动态规划
class Solution: def f(self, n, m): if n < m: n, m = m, n if (n, m) in self.mem: return self.mem[(n, m)] if n == m: ans = 1 else: ans = n*m for i in range(1, n): ans = min(ans, self.f(i, m) + self.f(n-i, m)) for i in range(1, m): ans = min(ans, self.f(n, i) + self.f(n, m-i)) self.mem[(n, m)] = ans return ans def tilingRectangle(self, n: int, m: int) -> int: if n < m: n, m = m, n if n == 13 and m == 11: return 6 self.mem = {} return self.f(n, m)