【今天的Leetcode每日一题我实在是无从下手,在看灵神解答分析的文章时看到了这个:带你发明 Floyd 算法:从记忆化搜索到递推,决定今天的自己的每日一题换成简单一点的,并且从头再学一遍动态规划】
灵茶山艾府:动态规划入门
【讲得太详细太清楚了!!!】
题目描述
学习
动态规划:基本思想是将待求解的问题分解成若干个子问题
①寻找子问题
②状态定义和状态转移方程
③递归+记录返回值【记忆化搜索】 ——> 为了防止重复记录
解答
class Solution:
def findTheCity(self, n: int, edges: List[List[int]], distanceThreshold: int) -> int:
w = [[inf]*n for _ in range(n)]
for i,j,weight in edges:
w[i][j] = w[j][i] = weight
@cache
def dfs(k,i,j):
if k<0 :
return w[i][j]
res = min(dfs(k-1,i,j), dfs(k-1,i,k)+dfs(k-1,k,j))
return res
ans = 0
min_cnt = inf
for i in range(n):
cnt = 0
for j in range(n):
if j!=i and dfs(n-1,i,j)<=distanceThreshold:
cnt +=1
if cnt<=min_cnt:
min_cnt = cnt
ans = i
return ans
Leetcode题与动态规划学习


被折叠的 条评论
为什么被折叠?



