Uriel's Corner

Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
posts - 0, comments - 50, trackbacks - 0, articles - 594
一根长度n的棍子,需要在上面cuts (list)的位置切割,每次切割的开销是当前这一小段的长度,问切割完的最小花费,递归DP
和Discussion再次学到lru_cache的用法


 1 #1547
 2 #Runtime: 761 ms (Beats 87.80%)
 3 #Memory: 20.5 MB (Beats 5.95%)
 4 
 5 class Solution:
 6     def minCost(self, n: int, cuts: List[int]) -> int:
 7         cuts.append(0)
 8         cuts.append(n)
 9         cuts.sort()
10 
11         @functools.lru_cache(None)
12         def dp(x, y):
13             if x >= y - 1:
14                 return 0
15             return cuts[y] - cuts[x] + min((dp(x, k) + dp(k, y) for k in range(x + 1, y)), default = 0)
16         return dp(0, len(cuts) - 1)

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理