Python动态规划练习合集
动态规划的套路,你学会了吗?python-dynamic-programming.rar
这个压缩包里头的内容,挺全的,适合你边看边练,慢慢摸清楚动态规划那一套怎么来的。也比较接地气,从子问题、状态转移,到常见例题,比如斐波那契、背包问题,全都有,代码也写得清爽,适合照着练。
动态规划的核心思路其实不难,说白了就是“以前做过的事别白做”,用空间换时间。像最长公共子序列
、最短路径
这类题,你只要找对了“状态”和“转移”,基本就能推出来。压缩包里给了不少实际案例,讲得还挺清楚。
记忆化那一段也写得不错,比如你用dict
或lru_cache
做缓存,可以大大减少重复计算。你要是习惯写递归,就比较适合加记忆化;要是想稳一点,就老老实实地用循环写迭代,效率更稳。
嗯,还有就是,每个例子都配了代码实现,像这种:
def fib(n):
dp = [0, 1]
for i in range(2, n+1):
dp.append(dp[i-1] + dp[i-2])
return dp[n]
逻辑直观,不绕弯,看了能上手。如果你最近刷题卡在背包问题或者 LCS,拿这个资源练一练,思路会清晰不少。
顺带推荐几个相关的参考文章,比如Python 最长公共子序列,还有Python 源码的 01 背包问题题解,这些也都挺实用。
如果你刚接触动态规划,建议先挑几个经典例子练手,比如斐波那契
、爬楼梯
,搞懂了“状态”和“转移”的关系,再去试试二维数组那种复杂点的模型。
42.17KB
文件大小:
评论区