1.7 Dynamic Programming
通过一道经典题理解动态规划
Triangle
#DFS: Traverse
#time: O(2^n), n = height
class Solution:
def minimumTotal(self, triangle: List[List[int]]) -> int:
self.best = sys.maxsize
self.traverse(triangle,0,0,0)
return self.best
def traverse(self, triangle, x,y,sum):
if x == len(triangle):
if sum < self.best:
self.best = sum
return
self.traverse(triangle,x+1, y, sum+triangle[x][y])
self.traverse(triangle, x+1, y+1, sum+triangle[x][y])
#DFS: Divide Conquer
#time:O(2^n)
class Solution:
def minimumTotal(self, triangle: List[List[int]]) -> int:
def divideConquer(x,y):
if x == len(triangle):
return 0
return triangle[x][y] + min(divideConquer(x+1, y), divideConquer(x+1, y+1))
return divideConquer(0,0)dp两种方法
什么时候使用动态规划
动规四要素
面试中常见动态规划的分类
Minimum Path Sum
Climbing Stairs
跳跃游戏 I && II
Unique Paths
Longest Increasing Subsequence
Russian Doll Envelopes
Largest Divisible Subset
青蛙过河
Maximum sum such that no two elements are adjacent
Last updated